我的问题与单个更新语句中的更新顺序有关。我观察到当我使用SELECT
语句设置变量时,变量按顺序设置。例如:
SELECT
@Test1 = 2,
@Test2 = @Test1 + 1
此时@Test1
将为2
,@Test2
将为3
,因为设置操作按顺序完成。但是UPDATE
会发生什么?
UPDATE TestTable SET
Test1 = 2,
Test2 = Test1 + 1
Test2
会在计算中使用Test1
的初始值,还是会使用我们设定的值?如果它是UPDATE
内的MERGE
语句,会有什么不同吗?
MERGE INTO TestTable AS T
USING (
SELECT
Test1,
Test2
FROM SomeOtherTable
) AS S
ON S.Test1 = T.Test1
WHEN MATCHED THEN
UPDATE SET
T.Test1 = 2,
T.Test2 = T.Test1 + 1
;
答案 0 :(得分:4)
作业右侧的名称是指列的旧值,无论它们的顺序如何。
这(例如)允许您在不使用临时变量的情况下交换两个值。
UPDATE foo
SET a = b,
b = a
http://sqlfiddle.com/#!3/f6984/1
SQL-92规范(第13.10节,第13.10节,一般规则,第6项)说明:
- 在更新T的任何行之前,对T的每一行有效地评估
<value expression>
。