Это мой самый первый пост! Потерпите меня.
У меня есть заявление об обновлении, которое я пытаюсь понять, как SQL Server обрабатывает его.
UPDATE a
SET a.vField3 = b.vField3
FROM tableName a
INNER JOIN tableName b on a.vField1 = b.vField1
AND b.nField2 = a.nField2 – 1
Это мой запрос в его самой простой форме.
vField1 is a Varchar
nField2 is an int (autonumber)
vField3 is a Varchar
Я пропустил предложение WHERE, чтобы понять, что есть логика, которая в противном случае делает это необходимым.
Скажем, vField1 - это номер клиента, и этот клиент имеет 3 записи
Значение в nField2 равно 1, 2 и 3 последовательно.
vField3 - это статус
Когда обновление доходит до a.nField2 = 1, a.nField2 -1 отсутствует, поэтому оно продолжается
Когда обновление доходит до a.nField2 = 2, b.nField2 = 1
Когда обновление доходит до a.nField2 = 3, b.nField2 = 2
Таким образом, когда Обновление находится на a.nField2 = 2, псевдоним b отражает то, что находится на предыдущей строке (b.nField2 = 1)
И это Устанавливает значение Varchar a.vField3 = b.vField3
Когда обновление для a.nField2 = 3, псевдоним b отражает то, что находится на предыдущей строке (b.nField2 = 2)
И это (должно) УСТАНОВИТЬ значение Varchar a.vField3 = b.vField3
Когда процесс завершен - Вторая из трех записей выглядит так, как ожидалось - поэтому значение в vField3 второй записи отражает значение в vField3 из Первой записи
Однако vField3 из Третьей записи не отражает значение в vField3 из Второй записи.
Я думаю, это демонстрирует, что SQL Server может производить какую-то транзакцию, а затем обновление.
Вопрос: Как я могу получить обновление БД после каждой транзакции, чтобы я мог ссылаться на значения, сгенерированные каждой транзакцией?
Спасибо.
davlyo