Frage

Ich habe eine Tabelle, die einen Insert-Trigger auf sich. Wenn ich in 6000 Datensätze in diese Tabelle aus einer gespeicherten Prozedur in einer INSERT-Anweisung einfügen, wird die gespeicherte Prozedur Rückkehr, bevor der Insert-Trigger abgeschlossen ist?

Nur um sicher zu machen, dass ich denke, der Trigger richtig, nur aufgerufen werden (ich weiß ‚genannt‘ ist nicht das richtige Wort) einmal, weil es nur 1 Insert-Anweisung war, nicht wahr?

Meine Hauptfrage ist: wird die sproc Finish auch wenn der Auslöser nicht abgeschlossen ist

War es hilfreich?

Lösung

Ihr Insert-Trigger läuft einmal für die gesamte Insert-Anweisung. Aus diesem Grunde ist es wichtig, die inserted temporäre Tabelle zu sehen, zu verwenden, was eingefügt tatsächlich wurde, und nicht nur die jüngste einzelne Datensatz auswählen, oder so ähnlich.

Getestet habe ich nur einen Einsatz und Update-Trigger und in der Tat sind sie Teil des Einsatzes von SQL Server betrachtet. der Prozess nicht beenden, bis der Trigger beendet ist.

Andere Tipps

Trigger ist Teil der Transaktion, die sie genannt.

Eine wichtige Sache, über Auslöser, die Sie bewusst sein müssen, ist, dass der Trigger ausgelöst einmal für jede Transaktion (zumindest in SQL Server, sollten Sie andere dbs überprüfen, aber selbst wenn es Zeile für Zeile verarbeitet wird, das heißt in der Regel ein schlechte Idee), also wenn Sie legen 6000 die Trigger ausgelöst, wenn nicht 6000 mal aufzeichnet. Viele Menschen sind sich nicht dessen bewusst und Trigger schreiben, als ob sie mehrere Datensatz fügt einen Datensatz zu einem Zeitpunkt verarbeitet. Das ist nicht wahr und Ihre Trigger muss für Übergabe der mehrere Rekordeinsatz berücksichtigen.

Der Lockruf ist nicht asynchron. Jeder Aufruf von Ihrem Einsatz Prozedur wird in dem Trigger führt gefeuert, und das Verfahren wird nicht zurückkehren, bis die Trigger beendet.

Werfen Sie einen Blick auf die Abfrage-Plan, um zu sehen, wie es funktioniert. Sie werden sehen, dass die Aussagen in dem Trigger für jeden Aufruf der Prozedur aufgerufen werden.

Die Sache ist, wird jedes Mal, wenn die Triggerkriterien, der Trigger ausgelöst erfüllt. Sie feuert einmal im Batch-Verarbeitung oder Transaktion. Sehen Sie mein Lektion 101 rel="nofollow TRIGGER

Sie sollten Cursor in Insert-Anweisung verwenden Trigger-Reihe zu verarbeiten. Da Trigger in SQL Server Feuer einmal pro Anweisung, nicht einmal pro Zeile.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top