小编典典

使用While循环进行SQL Server更新

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'

阅读 396

收藏
2021-04-07

共1个答案

小编典典

这实际上将不起作用,因为您不能在列名中加上引号。您实际上要做的是让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。对于执行一次性开发任务非常有用,但是我不喜欢它可能会被用户执行。

2021-04-07