Fragensteller
Trigger und mehrere gleichzeitige Inserts

Frage
-
Hallo Experten,
vor kurzem schrieb ich einen "INSTEAD OF" Trigger, mit dem ich versucht habe Datensätze zu behandeln, bevor ich sie in modifizierter Form in die Endtabelle schrieb. Das Problem, welches ich hierbei habe ist, dass der Trigger für ein Mehrfach-Insert nur einmal aufgerufen wird.
Beispiel:
insert into dbo.T_BILL_SUPPRESSION_HISTORY(......) values(......),(......),(......)
Hierbei wird mein Trigger nur einmal aufgerufen. Im Trigger mache ich folgendes:
SELECT
...
FROM
insertedwobei ich leider immer nur den letzten eingefügten Datensatz aus dem Multi-Insert bekomme. Wie bekomme ich es also hin, dass ich jeden einzelnen Datensatz aus dem Multiinsert-Statement bekomme
Alle Antworten
-
Hallo,
DML Trigger werden im SQL Server nur je Anweisung ausgeführt.
Wenn Du Daten verändern willst, solltest Du die Anweisung so formulieren,
dass sie auch für mehrere Datenzeilen funktioniert, was i. a. mit etwas Überlegung möglich ist.
Siehe z. B.: Erstellen von DML-Triggern für die Verarbeitung mehrerer DatenzeilenWenn Du Probleme damit hast, so erläutere näher, was Du in dem Trigger vorhast.
Gruß Elmar
-
Hallo,
ich nehme an, es geht konkret um den Fall Deinem anderen Post Probleme mit Triggern mit Update-Kommandos
Der Trigger Code ist dort nicht mehr vorhanden, deshalb nur exemplarisch. Du könnest für diesen Fall die Datensätze aus der virtuellen Tabelle "inserted" per Cursor abarbeiten. Zwar sollte man Cursor vermeiden, in dem Fall wäre es ein gangbarer Weg.
Beispiel:
DECLARE @var1 int; DECLARE @var2 int; DECLARE @var3 int; DECLARE myCursor CURSOR LOCAL READ_ONLY FOR SELECT Col1, Col2, Col3, ... FROM inserted; OPEN myCursor; -- Ersten Datensatz aus Cursor holen FETCH NEXT FROM myCursor INTO @var1, @var2, @var3, ...; WHILE (@@FETCH_STATUS = 0) BEGIN -- Hier kannst Du mit den Variablen Deine ursprüngliche Trigger Logik abarbeiten -- .... -- Nächsten Datensatz aus Cursor holen FETCH NEXT FROM myCursor INTO @var1, @var2, @var3, ...; END -- Cursor schließen und deallokieren CLOSE myCursor; DEALLOCATE myCursor;
Olaf Helper
Blog Xing -
Hallo Moe1980,
sollte die Antwort von Olaf Helper Dir geholfen haben, dann markiere sie bitte als Antwort.
Grüße,
Stefan Kleinewillinghoefer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwicklern“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden koennen.