2017-09-20 4 views
1

J'essaie de savoir est-il une valeur dans une requête dynamique, en ce moment je suis en utilisant cette solution:Existe-t-il un meilleur moyen de trouver une valeur spécifique dans une requête dynamique?

DECLARE 
    @SQL NVARCHAR(MAX) 
, @ISLN NUMERIC(9,0) = '967272' 
SET @SQL = 
'SELECT * 
FROM ITEM 
LEFT OUTER JOIN SHIPMENT_DETAIL 
ON ITEM.ITEM = SHIPMENT_DETAIL.ITEM 
AND (SHIPMENT_DETAIL.COMPANY = ITEM.COMPANY OR ITEM.COMPANY IS NULL) 
WHERE (SHIPMENT_DETAIL.warehouse = N''SH'') 
ORDER BY ITEM.ITEM ASC' 
SELECT @SQL = STUFF (
    @SQL 
    , 8 
    , 1 
    , 'INTERNAL_SHIPMENT_LINE_NUM' 
) 
DECLARE @TEMP TABLE (ISLN NUMERIC(9,0)) 
INSERT INTO @TEMP (ISLN) 
EXEC SP_SQLEXEC @SQL 
IF EXISTS (SELECT 1 FROM @TEMP WHERE ISLN = @ISLN) 
SELECT 1 
ELSE 
SELECT 0 

SQL dynamique est généré par d'autres logiciels, donc je ne peux pas changer les données d'entrée .

Existe-t-il un meilleur moyen de trouver une valeur spécifique dans une colonne spécifique d'une requête dynamique?

+0

'sp_sqlexec()' ??? –

Répondre

0

Essayez ceci, espérons que cela vous aidera:

DECLARE 
    @SQL NVARCHAR(MAX) 
, @ISLN NUMERIC(9,0) = '967272' 
SET @SQL = 
'SELECT * 
FROM ITEM 
LEFT OUTER JOIN SHIPMENT_DETAIL 
ON ITEM.ITEM = SHIPMENT_DETAIL.ITEM 
AND (SHIPMENT_DETAIL.COMPANY = ITEM.COMPANY OR ITEM.COMPANY IS NULL) 
WHERE (SHIPMENT_DETAIL.warehouse = N''SH'') 
ORDER BY ITEM.ITEM ASC' 

SELECT @SQL = 'if exists (' + STUFF (
    @SQL 
    , charindex('where', @sql) + 6 
    , 0 
    , 'INTERNAL_SHIPMENT_LINE_NUM = ' + cast(@isln as varchar(20)) + ' and ' 
) + ') select 1 else select 0;'; 
EXEC SP_SQLEXEC @SQL;