在以下声明中,f1
总是会获得f2
曾经拥有的值吗?或f2
有时会先更新f1
并NULL
结束?我的印象是语句中没有新值,f2
在处理记录时具有旧值,但我找不到一个说明这一点的权威位置。
UPDATE x
SET
x.f1 = x.f2,
x.f2 = NULL
答案 0 :(得分:4)
答案 1 :(得分:2)
f1
将始终在f2
之前获得UPDATE
之前的值。
从技术上讲,删除记录并重新插入。因此,SQL将确定新记录应该是什么,然后删除当前记录,然后插入新记录。
关于SQL触发器的这篇文章可能有助于解释:
删除的表在DELETE和UPDATE语句期间存储受影响行的副本。在执行DELETE或UPDATE语句期间,将从触发器表中删除行并将其传送到已删除的表。删除的表和触发器表通常没有共同的行。
insert表在INSERT期间存储受影响行的副本 和UPDATE语句。在插入或更新事务期间,新的 行被添加到插入的表和触发器表中。该 inserted表中的行是触发器中新行的副本 表