Мой вопрос связан с порядком обновлений в одном заявлении об обновлении. Я заметил, что когда я устанавливаю переменные с помощью оператора 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
;
Я не уверен, что это указано во всех реализациях SQL - см. Эту связанную проблему в Teradata, которая позволяет раннее повторное использование производных столбцов: http://stackoverflow.com/questions/2458700/early -или-re-ordered-re-use-of-output-columns-in-a-query-is-this-valid-ansi –