Вы можете легко превратить обычный оператор выбора в оператор обновления, заменив SELECT *
на UPDATE table...
Это позволяет вам сначала проверить, что будет обновляться, прежде чем фактически применить обновление.
Выберите выписку
SELECT *
FROM tab_B b
INNER JOIN (
SELECT item
, regBy
, MAX(regTime) AS latestUpdateTime
FROM tab_A
GROUP BY
item
, regBy
) a ON a.item = b.item
Оператор обновления
UPDATE tab_B
SET lastUpdated = a.latestUpdateTime
, lastUpdBy = a.regBy
FROM tab_B b
INNER JOIN (
SELECT item
, regBy
, MAX(regTime) AS latestUpdateTime
FROM tab_A
GROUP BY
item
, regBy
) a ON a.item = b.item
Другой способ проверить обновление и, в зависимости от вашей версии, - начать транзакцию и использовать предложение OUTPUT
.
BEGIN TRAN
UPDATE tab_B
SET lastUpdated = a.latestUpdateTime
, lastUpdBy = a.regBy
OUTPUT INSERTED.*
FROM tab_B b
INNER JOIN (
SELECT item
, regBy
, MAX(regTime) AS latestUpdateTime
FROM tab_A
GROUP BY
item
, regBy
) a ON a.item = b.item
ROLLBACK TRAN