У меня есть триггер SQL, который запускает обновление таблицы. Когда таблица обновляется, она изменяет некоторые поля в другой таблице.MSSQL trigger on UPDATE: поддержка нескольких обновлений строк
Кажется, что это работает, но я не уверен, правильно ли установлен статус, установленный (если он содержит несколько строк). Я протестировал его и получил правильный ответ (но все же я подозреваю, что это не правильный/лучший способ).
CREATE TRIGGER [dbo].[myTrigger]
ON [dbo].[myTable]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON
declare @OldStatus int
declare @NewStatus int
select @OldStatus = [currentStatus] FROM INSERTED
if @OldStatus = 1 or @OldStatus = 3 or @OldStatus = 5
begin
set @NewStatus = 1
end
if @OldStatus = 8 or @OldStatus = 9
begin
set @NewStatus = 8
end
if @OldStatus = 11 or @OldStatus = 12 or @OldStatus = 13
begin
set @NewStatus = 11
end
UPDATE myNewTable SET [LastModifiedDate] = GETDATE(),
[Status] = @NewStatus,
[Type] = inserted.Type
FROM inserted
WHERE ([id] = inserted.id)
END
Я думаю, что правильным решением было бы что-то вроде:
UPDATE myNewTable SET [LastModifiedDate] = GETDATE(),
[Status] = ***<add logic here>***,
[Type] = inserted.Type
FROM inserted
WHERE ([id] = inserted.id)
'выбрать @OldStatus = [CurrentStatus] FROM INSERTED'> > Это неправильно. Вы назначаете последний '[currentStatus]' как возвращаемый из таблицы 'SELECT' на' INSERTED'. –