我的问题与单个更新语句中的更新顺序有关。我观察到,当我使用SELECT
语句设置变量时,变量按顺序设置。例如:基于另一个更新列更新列
SELECT
@Test1 = 2,
@Test2 = @Test1 + 1
此时@Test1
将2
和@Test2
将3
因为集操作才能完成。但是UPDATE
会发生什么?
UPDATE TestTable SET
Test1 = 2,
Test2 = Test1 + 1
将Test2
使用Test1
初始值及其计算还是会使用刚设置的值?如果它是MERGE
中的UPDATE
声明,它会有什么区别吗?
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
;
我不确定这是否在所有SQL实现中指定相同 - 请参阅Teradata中的此相关问题,它允许及早重用派生列: http://stackoverflow.com/questions/2458700/early - 或 - 重新排序 - 重新使用的派生 - 在查询中的列是这个有效的ansi –