7

在下面的语句中,f1总是会得到f2以前拥有的值吗?或者f2有时会先更新并f1结束NULL?我的印象是新值在语句中不可用,f2在处理记录时具有旧值,但我找不到一个权威的地方来说明这一点。

UPDATE x
SET
    x.f1 = x.f2,
    x.f2 = NULL
4

2 回答 2

6

从概念上讲,操作“同时”发生,因此它将使用“之前”值

确实

UPDATE x
SET
 x.f1 = x.f2,
 x.f2 = x.f1

也可以很好地交换两列值。

于 2012-07-25T16:05:19.863 回答
2

f1总是会f2UPDATE.

从技术上讲,记录被删除,然后重新插入。所以 SQL 会计算出新记录应该是什么,然后删除当前记录,然后插入新记录。

这篇关于 SQL 触发器的文章可能有助于解释:

删除的表在 DELETE 和 UPDATE 语句期间存储受影响行的副本。在执行 DELETE 或 UPDATE 语句期间,行会从触发器表中删除并转移到已删除的表中。删除的表和触发器表通常没有共同的行。

插入的表在 INSERT 和 UPDATE 语句期间存储受影响行的副本。在插入或更新事务期间,新行会同时添加到插入表和触发器表中。插入表中的行是触发器表中新行的副本。

http://msdn.microsoft.com/en-us/library/ms191300.aspx

于 2012-07-25T15:58:59.820 回答