【问题标题】:Incorrect Syntax near "=" in Dynamic SQL动态 SQL 中“=”附近的语法不正确
【发布时间】:2016-06-21 22:42:58
【问题描述】:

以下是导致错误的查询:

EXECUTE (' UPDATE facetswrk.dbo.ODS_SUBSC_PREM_REPORT ' + ' SET ' + @lcrcolumn_name + ' = ' + @lcrcolumn_total)

【问题讨论】:

  • @lcrcolumn_name@lcrcolumn_total 的值是多少?
  • 如果您要更新 varchar 列,则 syntex : EXECUTE (' UPDATE facetswrk.dbo.ODS_SUBSC_PREM_REPORT ' + ' SET ' + @lcrcolumn_name + ' = ' ' + @lcrcolumn_total+''')
  • 旁注:使用 sp_executesql 减少 sql 注入机会
  • 如果语句是由字符串连接生成的,sp_executesql 本身不会防止 SQL 注入。使用参数化查询将

标签: sql-server sql-server-2012


【解决方案1】:

您的语法没问题,可能您的列名 valye 错误,或者您需要将 @lcrcolumn_tot 强制转换为 nvarchar。

给我们变量的值,pr自己用流动语句检查:

declare @lcrcolumn_name nvarchar(50) = 'blabla',
        @lcrcolumn_tot nvarchar(50) = 10
declare @sql nvarchar(4000);

set @sql = ' UPDATE facetswrk.dbo.ODS_SUBSC_PREM_REPORT SET ' + @lcrcolumn_name + ' = ' + @lcrcolumn_tot

print @sql
execute(@sql)

【讨论】:

    【解决方案2】:

    最好在执行之前打印动态 sql 以了解导致错误的原因,@lcrcolumn_name 和 @lcrcolumn_total 中可能有一些数据值,这可能会导致问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 2018-06-26
      • 2016-10-22
      • 2017-09-23
      • 1970-01-01
      相关资源
      最近更新 更多