运行dymanic SQL存储过程会导致在另一行捕获语法警报

运行dymanic SQL存储过程会导致在另一行捕获语法警报,sql,sql-server,Sql,Sql Server,我正在尝试使用动态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 = (SEL

我正在尝试使用动态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 ENTY.ENTY_ID=@ENTY_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变量中运行查询?

您缺少
中的单引号,如%@VALUE%
,它应该是
如%@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';

您缺少
中的单引号,如%@VALUE%
,它应该是
中的“%@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';

能否请
选择
@SQL
变量以查看其构造内容?能否请
选择
@SQL
变量以查看其构造内容?