Wenn ein Benutzer Tabelle HelloWorlds
ändert, dann möchte ich 'Aktion, die sie getan haben, Zeit, die sie taten, und eine Kopie der ursprünglichen Zeile einfügen in HelloWorldsHistory
.So kopieren Sie eine eingefügte, aktualisierte, gelöschte Zeile in einem SQL Server-Trigger
Ich würde lieber eine separate Trigger für Einfügen, Aktualisieren und Löschen von Aktionen aufgrund der Spaltenlängen vermeiden.
Ich habe dies versucht:
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
ich nie ein Einsatz erscheinen gesehen habe, aber ich habe gesehen Updates. Ich werde 3 separate Trigger versuchen, obwohl die Pflege der Spaltenlisten nicht Spaß machen wird.
Verwenden Sie nicht DELETED als Datenquelle für UPDATEs, Sie werden nur den vorherigen Wert protokollieren, der bereits aufgezeichnet wurde. Ihre Protokollzeile wird vom Typ "Update" sein, aber die Daten könnten von einer Einfügung stammen. Sehen Sie mich in meiner Antwort kommentieren. –