Если пользователь изменяет таблицу HelloWorlds
, тогда я хочу «действие, которое он совершил», время, когда он это сделал, и копию оригинальной строки вставьте в HelloWorldsHistory
.
Я бы предпочел избегать отдельных триггеров для операций вставки, обновления и удаления из-за длины столбцов.
Я пробовал это:
create trigger [HelloWorlds_After_IUD] on [HelloWorlds]
FOR insert, update, delete
as
if @@rowcount = 0
return
if exists (select 1 from inserted) and not exists (select 1 from deleted)
begin
insert into HelloWorldHistory (hwh_action, ..long column list..)
select 'INSERT', helloWorld.id, helloWorld.text ... and more from inserted
end
else
if exists (select 1 from inserted) and exists (select 1 from deleted)
begin
insert into HelloWorldHistory (hwh_action, ..long column list..)
select 'UPDATE', helloWorld.id, helloWorld.text ... and more from deleted
end
else
begin
insert into HelloWorldHistory (hwh_action, ..long column list..)
select 'DELETE', helloWorld.id, helloWorld.text ... and more from deleted
end
end
Я никогда не видел вставки, но видел обновления. Я собираюсь попробовать 3 отдельных триггера, хотя поддержание списков столбцов не будет забавным.