【问题标题】:SQL Server incorrect syntax exception when executing with sp_executesql使用 sp_executesql 执行时 SQL Server 不正确的语法异常
【发布时间】:2017-10-09 08:53:45
【问题描述】:

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

@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;

【问题讨论】:

  • 不知何故,神奇地,我们会知道哪些值被发送到这些参数?没有参数值就无法检查语法。
  • @Used_By_Already 我已按照您的要求更新了问题。

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


【解决方案1】:

你最终执行的是这样的:

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

(很脏,但就是这个意思。)

【讨论】:

  • 我正在使用这个解决方案,我要谢谢你。对于在连接的 sql 字符串中使用 int 变量,替换是一种救命的解决方案。
【解决方案2】:

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

【讨论】:

  • 这行不通。当您在此 set 子句之前声明 @ptable_name 时,它​​会起作用。
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2010-09-27
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
相关资源
最近更新 更多