Как сохранить результаты оператора Update в CTE (используя выходные данные) и вставить запись для каждого обновленного элемента - PullRequest
0 голосов
/ 02 октября 2018

Мне нужно обновить несколько строк и для всех обновленных строк вставить журнал в другую таблицу.

Вывод инструкции UPDATE, по-видимому, не считается допустимым "запросом" для CTE.Что я делаю не так?

WITH cte AS (UPDATE processowner SET Owner=1 OUTPUT inserted.[ProcessId] WHERE Owner=2)
INSERT INTO processlog ([ProcessId],[Event],[Note]) VALUES (cte.[ProcessId],'something happened','the note')

1 Ответ

0 голосов
/ 02 октября 2018

здесь, я использую табличные переменные, но это должно дать вам представление, вы также можете сделать триггеры для таблицы для регистрации изменений.

declare @processowner table(processid int, Owner int);
insert into @processowner values(1,1);
insert into @processowner values(1,2);
insert into @processowner values(1,3);

declare @updated table(processid int);


UPDATE @processowner SET [Owner]=1 
    OUTPUT inserted.[ProcessId] 
    into @updated
WHERE [Owner]=2;

select * From @processowner;
...