Steuern der Triggerausführung beim Massenimport von Daten

Ein Trigger ist ein besonderer Typ einer gespeicherten Prozedur, der automatisch ausgeführt wird, wenn ein Benutzer Daten in einer Tabelle oder Sicht ändert. Das Ausführen von Triggern kann die Leistung eines Massenimportvorgangs beeinträchtigen. Wenn z. B. ein Trigger jedesmal eine E-Mail-Nachricht sendet, wenn ein Datensatz importiert wird, wird die Geschwindigkeit eines Massenimportvorgangs reduziert und ein Durcheinander von E-Mails erzeugt.

Beim Massenimport von Daten können Sie mit dem Massenimportvorgang steuern, ob Trigger ausgeführt (bzw. ausgelöst) werden. Trigger sollten von einem Massenimportvorgang nur für eine Tabelle ausgeführt werden, deren INSERT- und INSTEAD OF-Trigger das Einfügen mehrerer Zeilen unterstützen. Weitere Informationen zu diesen Triggern finden Sie unter DML-Trigger.

Wichtiger HinweisWichtig

Wenn Trigger deaktiviert sind, können mit einer Schemaänderungssperre die Metadaten aktualisiert werden. Dadurch können andere Befehle (z. B. eine Onlineindexerstellung) oder Transaktionen beeinträchtigt werden. Beispielsweise kann bei einer Snapshot-Isolationstransaktion, die auf die Zieltabelle zugreift, ein Fehler aufgrund gleichzeitiger DDL-Änderungen auftreten.

Falls Trigger aktiviert sind, werden sie pro Batch einmal ausgeführt.

Während eines Massenimportvorgangs hängt das Verhalten von dem für den Vorgang verwendeten Befehl ab. Standardmäßig werden Trigger vom bcp-Befehl und von der BULK INSERT-Anweisung (Transact-SQL) deaktiviert. Im Gegensatz dazu werden bei INSERT ... SELECT * FROM OPENROWSET(BULK...)-Anweisung standardmäßig Trigger ausgeführt.

In der folgenden Tabelle wird das Standardverhalten zusammengefasst.

Massenimportbefehl

Standardverhalten

bcp

Trigger deaktivieren

BULK INSERT

Trigger deaktivieren

INSERT ... SELECT * FROM OPENROWSET(BULK...)

Trigger ausführen

Jeder Massenimportbefehl stellt einen Qualifizierer bereit, mit dem Sie wie in den folgenden Abschnitten beschrieben festlegen können, wie Trigger behandelt werden.

Ausführen von Triggern mit bcp oder BULK INSERT

Standardmäßig werden Trigger vom bcp-Befehl und von der BULK INSERT-Anweisung nicht ausgeführt. Sie können jedoch Trigger mithilfe der folgenden Qualifizierer aktivieren:

Befehl

Qualifizierer

Qualifizierertyp

bcp

-h"FIRE_TRIGGERS"

Hinweis

BULK INSERT

FIRE_TRIGGERS

Argument

Falls FIRE_TRIGGERS für einen Massenimportvorgang angegeben ist, werden alle für die Tabelle definierten INSERT- und INSTEAD OF-Trigger für alle in die Tabelle eingefügten Zeilen ausgeführt.

Weitere Informationen finden Sie unter bcp (Dienstprogramm) und BULK INSERT (Transact-SQL).

Deaktivieren von Triggern in INSERT ... SELECT * FROM OPENROWSET(BULK...)

Standardmäßig werden Trigger vom OPENROWSET BULK-Rowsetanbieter ausgeführt. Sie können Trigger mithilfe des folgenden Qualifizierers deaktivieren:

Befehl

Qualifizierer

Qualifizierertyp

INSERT ... SELECT * FROM OPENROWSET(BULK...)

WITH(IGNORE_TRIGGERS)

Tabellenhinweis

Wenn dieser Hinweis angegeben ist, werden Trigger vom OPENROWSET BULK-Rowsetanbieter nicht ausgeführt. Weitere Informationen zum IGNORE_TRIGGERS-Hinweis finden Sie unter Tabellenhinweise (Transact-SQL).

Importieren großer Batches mit aktivierten Triggern

SQL Server 2005 und höhere Versionen verwenden für Trigger die Zeilenversionsverwaltung und speichern die Zeilenversionen im Versionsspeicher in tempdb. Bevor Sie einen Massenimport eines großen Batches von Datensätzen, die Trigger verwenden, durchführen können, müssen Sie gegebenenfalls die Größe von tempdb erweitern, um der Auswirkung der Trigger auf den Versionsspeicher gerecht zu werden. Weitere Informationen finden Sie unter Ressourcenverwendung bei der Zeilenversionsverwaltung.