我正在尝试提高SQL编程的效率。我正在尝试运行一个循环,以对仅按数字后缀更改的字段名称重复执行更新命令。
例如,而不是写出来x_1, y_1,然后x_2, y_2每次更新:
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'
这实际上将不起作用,因为您不能在列名中加上引号。您实际上要做的是让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。对于执行一次性开发任务非常有用,但是我不喜欢它可能会被用户执行。