使用同一记录中的值进行SQL更新

时间:2012-07-25 15:56:44

标签: sql sql-server

在以下声明中,f1总是会获得f2曾经拥有的值吗?或f2有时会先更新f1NULL结束?我的印象是语句中没有新值,f2在处理记录时具有旧值,但我找不到一个说明这一点的权威位置。

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

2 个答案:

答案 0 :(得分:4)

从概念上讲,操作发生"all at once",因此它将使用“之前”值

确实

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

也可以正常交换两个列值。

答案 1 :(得分:2)

f1将始终在f2之前获得UPDATE之前的值。

从技术上讲,删除记录并重新插入。因此,SQL将确定新记录应该是什么,然后删除当前记录,然后插入新记录。

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

  

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

     

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

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