如何解决使用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] 举报,一经查实,本站将立刻删除。