运行dymanic SQL存储过程会导致在另一行捕获语法警报
我正在尝试使用动态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
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
变量以查看其构造内容?