2017-01-31 6 views
0

を構文アラートを引くにdymanic SQLストアドプロシージャの結果を実行:は私が声明を移入し、それを実行するために、動的SQLを使用しようとしています他の行に

DECLARE @ENTY_ID INT; 
DECLARE @FIELD_ID INT; 
DECLARE @VALUE NVARCHAR(50); 
DECLARE @ENTY_TABLE_NAME NVARCHAR(500); 
DECLARE @SQL NVARCHAR(MAX); 

SET @ENTY_ID = 1; 
SET @FIELD_ID = 90; 
SET @VALUE = '0'; 

SET @ENTY_TABLE_NAME = 
(SELECT TOP 1 ENTY_TABLE_NAME 
FROM ENTY 
WHERE [email protected]_ID); 

SET @SQL = ' 
SELECT DISTINCT ATTR_VAL 
FROM @ENTY_TABLE_NAME 
WHERE FIELD_ID = @FIELD_ID AND ATTR_VAL LIKE %@VALUE% 
ORDER BY ATTR_VAL'; 

SET @SQL = replace(@SQL, '@ENTY_TABLE_NAME', @ENTY_TABLE_NAME + '_ATTR'); 
SET @SQL = replace(@SQL, '@FIELD_ID', @FIELD_ID); 
SET @SQL = replace(@SQL, '@VALUE', @VALUE); 

EXEC SP_EXECUTESQL @SQL; 

私は最後のEXECを除くすべての行を実行すると、コマンドは正常に完了します。

私はすべて一緒にそれを実行すると、私が手:

Msg 102, Level 15, State 1, Line 4 
Incorrect syntax near '0'. 

私は、構文の問題が呼ばれているか表示されません。 @SQL変数でクエリを実行するにはどうすればよいですか?

+1

は、あなたが 'SELECT'それが構築されものを見るために' @のSQL'変数を喜ばせることはできますか? – Siyual

答えて

3

あなたはLIKE %@VALUE%で単一引用符が欠落している、それはLIKE ' %@VALUE%'次のようになります。

SET @SQL = ' 
SELECT DISTINCT ATTR_VAL 
FROM @ENTY_TABLE_NAME 
WHERE FIELD_ID = @FIELD_ID AND ATTR_VAL LIKE ''%@VALUE%'' 
ORDER BY ATTR_VAL'; 
関連する問題