微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用While循环进行SQL Server更新

如何解决使用While循环进行SQL Server更新

这实际上将不起作用,因为您不能在列名中加上引号。您实际上要做的是让sql比较两个始终不同的字符串,这意味着您永远不会执行更新。

如果必须以这种方式进行操作,则必须具有类似…的功能

DECLARE @a INT 
DECLARE @b VARCHAR 
SET @a = 1

WHILE @a < 30
BEGIN
set @b = @a  
exec sp_executesql N'UPDATE source set h = h + 'x_'+@b + N'
           where y_'+@b + N' = ''Sold'''

SET @a = @a + 1
END

但总的来说,我不鼓励这种做法。我不喜欢在任何种生产代码的另一个sql语句中生成动态sql。对于执行一次性开发任务非常有用,但是我不喜欢它可能会被用户执行。

解决方法

我正在尝试提高SQL编程的效率。我正在尝试运行一个循环,以对仅按数字后缀更改的字段名称重复执行更新命令。

例如,而不是写出来x_1,y_1,然后x_2,y_2每次更新:

DECLARE @a INT 
DECLARE @b VARCHAR

SET @a = 1
WHILE @a < 30
set @b = @a
  BEGIN
       UPDATE source set h = h + "x_"+@b
           where "y_"+@b = 'Sold'
    SET @a = @a + 1
  END

让我知道是否可以澄清。我正在使用SQL Server 2005。

感谢您的指导。


我正在尝试应用Adams的解决方案,并且需要了解以下N’的正确用法:

exec sp_executesql update source_temp set pmt_90_day = pmt_90_day + convert(money,'trans_total_'+@b'')
    where convert(datetime,'effective_date_'+@b) <= dateadd(day,90,ORSA_CHARGE_OFF_DATE)
    and DRC_FLAG_'+@b = 'C'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。