2017-02-14 4 views
0

Ich verwende einen Trigger auf meinem Tisch für die Aktualisierung.SQL Server mehrere Update-Zeilen auslösen

Wenn ich 1 Zeile aktualisiert habe, funktioniert es. Aber wenn ich 20 Zeilen gleichzeitig aktualisiere, zeigt das Protokoll nur 1 Verlaufsaktualisierung an.

Ich möchte alle aktualisierten Zeilen anzeigen. Wie man es macht?

Das ist meine einfache SQL:

create trigger Triger_Update_Product 
on product 
for update 
as begin 
    declare @first char(10) 
    declare @after char(10) 

    select @first = name from deleted 

    select @after = name from inserted 

    insert into historyproduk 
     select @first, @after, getdate() 
end 
+0

https://msdn.microsoft.com/en-in/library/ms190752.aspx –

Antwort

0

benötigen Sie den Auslöser in einer Set-basierte Art und Weise zu schreiben und sich bewusst sein, dass inserted und deletedmehrere Zeilen enthalten - so diese Zeilen Code sind wirklich schlecht:

select @first = name from deleted 
select @after = name from inserted 

Diese einer beliebigen Zeile auswählen aus dem Update-set - ein d sie ignorieren alle anderen Zeilen. Tun Sie das nicht !!

Versuchen Sie stattdessen:

create trigger Trigger_Update_Product 
on product 
for update 
as begin 
    insert into historyproduk 
     select d.name, i.name, getdate() 
     from deleted d 
     inner join inserted i on d.PrimaryKey = i.PrimaryKey 
end 

Sie müssen die Inserted und Deleted Pseudo-Tabellen auf dem Primärschlüssel verbinden und dann die Name aus dem alten Grab (deleted) und neuen (Inserted) und der Einsatz diese - zusammen mit dem Datum/Zeitstempel - in die Geschichte Tabelle in einer einzigen INSERT ... SELECT .... Anweisung zu behandeln mehrere Zeilen wird aktualisiert