使用While循环进行SQL Server更新

hom*_*jay 1 sql loops sql-server-2005

我试图在我的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
Run Code Online (Sandbox Code Playgroud)

如果我能澄清,请告诉我.我正在使用SQL Server 2005.

谢谢你的指导.


我正在尝试应用Adams的解决方案,需要了解以下内容的正确用法:

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'
Run Code Online (Sandbox Code Playgroud)

Ada*_*son 8

这实际上不起作用,因为您不能在引号中使用列名.你实际上在做的是让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
Run Code Online (Sandbox Code Playgroud)

但总的来说,我不鼓励这种做法.我不喜欢在任何类型的生产代码的另一个SQL语句中生成动态SQL.对于进行一次性开发任务非常有用,但我不喜欢它可以由用户执行的代码.