我的問題與單個更新語句中的更新順序有關。我觀察到,當我使用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 –