Trigger nicht auslösen für alle Zeilen, die beim einfügen mehrere Zeilen, SQL
Stehe vor einem problem mit dem trigger.
Erstellte ich einen trigger für eine Tabelle wie diese
ALTER TRIGGER [dbo].[manageAttributes]
ON [dbo].[tr_levels]
AFTER insert
AS
BEGIN
set nocount on
declare @levelid int
select @levelid=levelid from inserted
insert into testtable(testid) values(@levelid)
-- Insert statements for trigger here
END
Aber wenn ich das einfügen von Zeilen in Tabelle tr_levels wie diese
insert int tr_levels (column1,colum2) values(1,2)
trigger ausgelöst perfekt
Aber wenn ich versuchte, Sie zum einfügen in die Tabelle als bulk-wie dies
insert int tr_levels (column1,colum2) values(1,2),(3,4),(5,6)..
Trigger nicht ausgelöst, werden alle Zeilen. Es feuert nur einmal für die erste Zeile. Ist, dass der Fehler mit SQL oder gibt es eine Lösung, die trigger der trigger für alle Zeilen einfügen, die in einer bulk insert-Abfrage
- Anfordern ein wenig Unterstützung. Ich nicht verstehen, dass Punkt. Ich meine, wie zur Einstellung der trigger so, dass es funktionieren sollte für alle Zeilen
- Sie gesprochen haben, in die Kommentare, als ob Sie eine Notwendigkeit zum durchführen einer Aktion für jede Zeile eingefügt. Gibt es etwas, was Sie tun müssen, dass man nicht alles auf einmal tun, mit all den Akten, in
inserted
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, das ist Feuer für alle Zeilen - einmal - aber sind Sie ignorieren die anderen Zeilen, indem Sie als wenn
inserted
enthält nur eine.select @scalar_variable=column from inserted
wird willkürlich ruft einen Wert aus einer der Reihen und ignoriert die anderen. Schreiben Sie eine set-basierte einfügen mitinserted
imFROM
KlauselMüssen Sie behandeln
inserted
als eine Tabelle enthalten kann 0, 1 oder mehrere Zeilen. Also, so etwas wie:UPDATE
Ordnung (SQL Server ermöglichtUPDATE ... FROM
hat einige Probleme, kann aber in der Regel die Arbeit in Ordnung)Sie haben das gleiche Problem viele Leute haben, dass: Sie denken, dass der trigger ausgelöst wird pro Zeile. Es ist nicht - es ist pro Betrieb. Und eingefügt ist ein Tisch. Nehmen Sie einen (zufälligen) Wert und ignorieren Sie den rest. Fix, und es wird funktionieren.
Demontage Feuer einmal pro Anweisung in der Basis-Tabelle. Also, wenn Sie 5 Zeilen in einer Anweisung, die den trigger feuert einmal und eingefügt hat, die 5 Zeilen.