使用sp_executesql执行时,SQL Server语法异常不正确
我正在从触发器调用过程并将某些参数从触发器传递到过程。参数是:使用sp_executesql执行时,SQL Server语法异常不正确
@table_name varchar(128), @where_str varchar(200)
在过程中,我执行的命令为sp_executesql
。我想,我使用的语法不正确,但我找不到解决方案。
这是所执行的查询:
SET @SqlString = N'update @ptable_name set RepSt=2 @pwhere_str';
SET @ParmDefinition = N'@ptable_name varchar(128), @pwhere_str varchar(200)';
execute sp_executesql @SqlString, @ParmDefinition,
@ptable_name = @table_name, @pwhere_str = @where_str;
传递的参数是这样的:
-
@table_name
是[MyTable]
@where_str = N'where MyColumnA = '[email protected]+N' AND MyColumnB = '[email protected]+N' AND MyColumnC = '[email protected];
你最终执行的是一样的东西:
DECLARE @ptable_name VARCHAR(128) = 'your_Table'
, @pwhere_str VARCHAR(200) = 'Your_where_clause'
UPDATE @ptable_name
SET RepSt=2
WHERE @pwhere_str
这是不行的,你需要更换可变在执行的SQL:
SET @SqlString = N'update @ptable_name set RepSt=2 @pwhere_str';
SET @SqlString = REPLACE(REPLACE(@SqlString, '@ptable_name', @table_name), '@pwhere_str', @where_str)
execute sp_executesql @SqlString
(非常脏,但这是主意。)
我正在使用这个解决方案,我想感谢你。为了在concatanated sql字符串中使用int变量,替换是一个挽救生命的解决方案。 – Tunahan
SET @SQLString = N'update' + @ptable_name +'set RepSt = 2 @pwhere_str';
这不起作用。当你在这个set子句之前声明@ptable_name时,它就起作用了。 – Tunahan
不知何故,神奇地,我们会知道什么值被发送到这些参数?没有参数值就无法检查语法。 –
@Used_By_Already我按照你的要求更新了问题。 – Tunahan