使用来自同一记录的值进行SQL更新
在以下语句中,f1
总是会得到f2
以前的值吗?或者f2
有时会首先更新,f1
最后会更新为NULL
?我的印象是,新的价值在声明中不可用,f2
在处理记录时具有旧的价值,但我找不到一个说明这一点的权威地方。使用来自同一记录的值进行SQL更新
UPDATE x
SET
x.f1 = x.f2,
x.f2 = NULL
f1
总是会得到UPDATE
前f2
的前值。
从技术上讲,记录被删除并重新插入。因此,SQL将计算新记录的内容,然后删除当前记录,然后插入新记录。
本文中有关SQL触发器可能有助于解释:受影响的行的过程中DELETE和UPDATE语句
删除的表存储的副本。在执行DELETE或UPDATE语句期间,将从触发器表中删除行并将其传输到已删除的表中。删除的表和触发器表通常没有行。
插入的表在INSERT 和UPDATE语句中存储受影响的行的副本。在插入或更新事务期间,新插入的表和触发器表中都会添加新行 行。插入表中的 行是触发器 表中新行的副本。
你是什么意思“从技术上讲”记录被删除,并重新插入? SQL Server可以实现更新。而TBH我根本没有看到触发器的相关性。 – 2012-07-25 16:09:01
@MartinSmith查看我引用的文字。在UPDATE记录被删除和插入的过程中,我的印象是什么? – Curt 2012-07-25 16:10:38
仅在某些情况下。例如,如果聚簇索引键列被更新并且行需要移动。 – 2012-07-25 16:11:24
谢谢! '一下子'是我需要查找和阅读的术语/概念。干杯。 – 2012-07-25 16:38:10