我从触发器调用过程并将一些参数从触发器传递给过程。参数是:
@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;
答案 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
(很脏,但这是个主意。)