我想做的(我知道这行不通)是:
update stats
set BandwidthLastMonth = BandwidthThisMonth,
BandwidthThisMonth=0
where myPk = 3
有没有办法在 select 语句中执行此操作?或者我是否需要编写一个存储过程并将每条记录命中两次(我当然希望不需要)。
我的解决方案需要适用于 Sql Azure 和 Sql Server 2008。
我想做的(我知道这行不通)是:
update stats
set BandwidthLastMonth = BandwidthThisMonth,
BandwidthThisMonth=0
where myPk = 3
有没有办法在 select 语句中执行此操作?或者我是否需要编写一个存储过程并将每条记录命中两次(我当然希望不需要)。
我的解决方案需要适用于 Sql Azure 和 Sql Server 2008。
在我们看到实际代码之前,我们只能推测,但对于什么是值得的,我会做一个猜测。
假设您的代码仅涉及一个表及其列(不涉及@variables)并且类似于:
它是有效的 SQL 且 100% 正确。正确,这意味着更新之后将具有更新之前
column_a
的值,并且对于所有通过.column_b
column_b
0
(condition)
SQL-Server 严格遵循此行为,没有理由认为它会在未来版本中偏离标准。
SQL 成组工作,并且更新是在整行上“同时”完成的。(它们可能不会同时完成,但结果与它们是一样的。)您可以将代码更改为此,结果将(保证)相同:
事实上,以下也是有效且等效的 SQL(尽管尚未在 SQL-Server 中实现);
我没有测试过 Azure,但如果它偏离了这个基本的 SQL 行为,最好在某处记录下来。