使用sp_executesql执行时SQL Server不正确的语法异常

时间:2017-10-09 08:53:46

标签: sql-server stored-procedures triggers syntax-error

我从触发器调用过程并将一些参数从触发器传递给过程。参数是:

@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 = '+@oldMyColumnA+N' AND MyColumnB = '+@oldMyColumnB+N' AND MyColumnC = '+@oldMyColumnC;

2 个答案:

答案 0 :(得分:0)

SET @SqlString = N'update'+ @ptable_name +'set RepSt = 2 @pwhere_str';

答案 1 :(得分:0)

你最终执行的是:

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

(很脏,但这是个主意。)