Как скопировать вставленную, обновленную, удаленную строку в триггере SQL Server (s)

Если пользователь изменяет таблицу 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 отдельных триггера, хотя поддерживать списки столбцов будет неинтересно.

9
задан marc_s 8 December 2010 в 19:26
поделиться