Steuern der Einschränkungsüberprüfung mithilfe von Massenimportvorgängen

Beim Massenimport von Daten können Sie steuern, ob CHECK-Einschränkungen durch den Massenimportvorgang erzwungen werden. Eine Einschränkung ist eine Geschäftsregel, die auf eine Spalte zum Zweck der Definition ihrer gültigen Werte angewendet wird. Eine Spalte für Telefondurchwahlnummern kann beispielsweise mit einer Einschränkung der Form #### belegt werden. Das Definieren und Überprüfen von Einschränkungen ist der Standardmechanismus zum Erzwingen von Datenintegrität. Microsoft empfiehlt die Einschränkungsüberprüfung während eines inkrementellen Massenimports als übliche Vorgehensweise.

Es kann vorkommen, dass Einschränkungen ignoriert werden sollen. Ein Beispielszenario bestünde aus Eingabedaten mit Zeilen, die Einschränkungen verletzen. Durch das Ignorieren der Einschränkungen können Sie die Daten laden und dann Transact-SQL-Anweisungen zum Bereinigen (Cleanup) der Daten verwenden.

HinweisHinweis

Wenn Sie währen eines Massenimportvorgangs Einschränkungen ignorieren, können Daten in die Tabelle eingefügt werden, die vorhandene Einschränkungen verletzen. Aus diesem Grund wird die Einschränkung in der Tabelle in der sys.check_constraints-Katalogsicht mit is_not_trusted markiert (weitere Informationen finden Sie unter sys.check_constraints (Transact-SQL)). Zu einem bestimmten Zeitpunkt sollten Sie allerdings die Einschränkungen für die gesamte Tabelle überprüfen.

Wenn die Tabelle vor dem Massenimportvorgang nicht leer war, überschreitet der Aufwand der erneuten Überprüfung möglicherweise denjenigen der Anwendung von CHECK-Einschränkungen auf die inkrementellen Daten. Nach dem Importieren problematischer Daten müssen Sie Transact-SQL für den Cleanup der importierten Daten verwenden.

Wichtiger HinweisWichtig

Wenn Einschränkungen deaktiviert sind, kann für das Aktualisieren der Metadaten eine Schemaänderungssperre eingesetzt werden. Dies kann sich störend auf andere Befehle (beispielsweise einer Online-Indexerstellung) oder Transaktionen auswirken. Eine Snapshotisolierungstransaktion, die auf die Zieltabelle zugreift, kann beispielsweise wegen gleichzeitiger DDL-Änderungen einen Fehler erzeugen.

Weitere Informationen zu Einschränkungen finden Sie unter Einschränkungen.

Während eines Massenimportvorgangs hängt das Verhalten der Einschränkungsüberprüfung von dem Befehl ab, der für den Vorgang verwendet wurde. Standardmäßig werden Einschränkungen vom bcp-Befehl und der BULK INSERT-Anweisung ignoriert. Im Gegensatz dazu werden bei einer INSERT ... SELECT * FROM OPENROWSET(BULK...)-Anweisung Einschränkungen überprüft.

In der folgenden Tabelle ist das standardmäßige Verhalten der Massenimportbefehle bei der Einschränkungsüberprüfung zusammengefasst.

Befehl

Standardverhalten

bcp

Einschränkungen ignorieren

BULK INSERT

Einschränkungen ignorieren

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

Einschränkungen überprüfen

Alle Massenimportbefehle stellen einen Qualifizierer zur Verfügung, mit dessen Hilfe die Art der Handhabung von Einschränkungen geändert werden kann. Dies wird in den folgenden Abschnitten erklärt.

Überprüfen von Einschränkungen mithilfe von bcp oder BULK INSERT

Standardmäßig werden Einschränkungen während eines Massenimportvorgangs ignoriert, der vom bcp-Befehl oder von der BULK INSERT-Anweisung ausgeführt wird.

Mithilfe des bcp-Befehls und der BULK INSERT-Anweisung können Sie angeben, dass Einschränkungen während eines Massenimportvorgangs erzwungen werden müssen. Das Erzwingen von Einschränkungen verlangsamt den Massenimportvorgang, stellt aber sicher, dass keine der eingefügten Daten irgendeine der vorhandenen Einschränkungen verletzen. In der folgenden Tabelle sind die Qualifizierer zusammengefasst, die zur Angabe der Einschränkungserzwingung während eines Massenimportvorgangs verwendet werden können.

Befehl

Qualifizierer

Qualifizierertyp

bcp

-h"CHECK_CONSTRAINTS"

Hinweis

BULK INSERT

CHECK_CONSTRAINTS

Argument

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

Ignorieren von Einschränkungen in INSERT ... SELECT * FROM OPENROWSET(BULK...)

Standardmäßig werden mit INSERT die CHECK-Einschränkungen überprüft, mit der INSERT ...SELECT * FROM OPENROWSET(BULK...)-Anweisung können Sie jedoch die Überprüfung der CHECK-Einschränkungen überschreiben. Weitere Informationen zu diesen Einschränkungen finden Sie unter CHECK-Einschränkungen.

HinweisHinweis

Nur die CHECK-Einschränkungen können deaktiviert werden. Die Einschränkungen UNIQUE, PRIMARY KEY, FOREIGN KEY oder NOT NULL können nicht deaktiviert werden.

In der folgenden Tabelle ist der Tabellenhinweis für das Ignorieren von CHECK-Einschränkungen zusammengefasst.

Befehl

Qualifizierer

Qualifizierertyp

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

WITH (IGNORE_CONSTRAINTS)

Tabellenhinweis

Das folgende Beispiel veranschaulicht die Verwendung dieses Qualifizierers. Weitere Informationen zum IGNORE_CONSTRAINTS-Hinweis finden Sie unter Tabellenhinweise (Transact-SQL).

Überprüfen auf Datenimport

Wenn Sie währen eines Massenimportvorgangs Einschränkungen ignorieren, können Sie importierte Tabellenzeilen, die gegen die Einschränkungen verstoßen, zu einem späteren Zeitpunkt identifizieren, indem Sie die importierten Daten manuell überprüfen. Um die Daten manuell zu überprüfen, können Sie Transact-SQL-Abfragen oder gespeicherte Prozeduren verwenden, die die Einschränkungsbedingungen testen.

HinweisHinweis

Um zu erfahren, ob eine Tabelle vertrauenswürdig ist, sehen Sie sich die is_not_trusted-Spalte in der sys.check_constraints-Katalogsicht an. Weitere Informationen finden Sie unter sys.check_constraints (Transact-SQL).