2017-09-20 3 views
1

は、動的なクエリの値が、私はこのソリューションを使用しています現時点では、そこにある:動的クエリで特定の値を見つけるより良い方法はありますか?私は見つけるためにしようとしている

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は、他のソフトウェアによって生成されるので、私は、入力データを変更することはできません。 。

動的クエリの特定の列で特定の値を見つけるより良い方法はありますか?

+0

'sp_sqlexec()' ??? –

答えて

0

は、それはあなたを助けることを願って、これを試してみてください:

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; 
関連する問題