排序是否与SQL更新中的字段有关?

时间:2010-04-27 21:42:19

标签: sql sql-server

在我看来,如果你在更新语句中有相互依赖的字段,我不确定是否可以保证订购(或者需要!)。

例如,假设您有以下更新:

UPDATE Table
SET NewValue = OldValue, OldValue = NULL

NewValue会先更新,然后OldValue会无效吗?或者,在处理过程中行(或集合或表等)的状态是不可变的,以便在计算更改之前不会提交所有更改?

3 个答案:

答案 0 :(得分:6)

创建一个新的虚拟行,然后以原子方式替换现有的行。您可以访问所有现有值,直到提交数据。

编辑顺便说一下,这不是一种不寻常的情况。

答案 1 :(得分:4)

是的,系统会在执行查询之前将NewValue更新为OldValue中存在的值,然后将OldValue设置为null。实际上,您可以像这样交换值:

UPDATE Table
SET NewValue = OldValue, OldValue = NewValue

答案 2 :(得分:0)

为什么不将它作为两个单独的查询运行?

begin transaction
UPDATE Table
SET NewValue = OldValue

UPDATE Table
SET OldValue = NULL
commit

或者这是家庭作业吗?