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

Aktualisiert: 12. Dezember 2006

Beim Massenimport von Daten können Sie steuern, ob CHECK- und FOREIGN KEY-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.

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

ms186247.note(de-de,SQL.90).gifWichtig:
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- und FOREIGN KEY-Einschränkungen überprüft. Mit einer INSERT ... SELECT * FROM OPENROWSET(BULK...)-Anweisung können Sie jedoch die Überprüfung von CHECK- und FOREIGN KEY-Einschränkungen deaktivieren. .

ms186247.note(de-de,SQL.90).gifHinweis:
Die Einschränkungen UNIQUE, PRIMARY KEY und NOT NULL können nicht deaktiviert werden.

In der folgenden Tabelle ist der Tabellenhinweis für das Ignorieren von CHECK- und FOREIGN KEY-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 Tabellenhinweis (Transact-SQL).

Überprüfen auf Datenimport

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 jede ignorierte Einschränkung für die Tabelle in der sys.check_constraints- oder sys.foreign_keys-Katalogsicht mit is_not_trusted markiert. Irgendwann wird es notwendig sein, die Einschränkungen für die gesamte Tabelle zu überprüfen.

Sie können importierte Tabellenzeilen, die gegen die Einschränkungen verstoßen, identifizieren, indem Sie die importierten Daten manuell mithilfe von Transact-SQL-Abfragen oder gespeicherten Prozedurchen überprüfen, mit denen die Einschränkungsbedingungen getestet werden.

Siehe auch

Andere Ressourcen

bcp (Dienstprogramm)
BULK INSERT (Transact-SQL)
DBCC CHECKCONSTRAINTS (Transact-SQL)
INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
SELECT (Transact-SQL)
Tabellenhinweis (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

12. Dezember 2006

Geänderter Inhalt:
  • Das Thema wurde überarbeitet, um anzugeben, dass CHECK- und FOREIGN KEY-Einschränkungen gemeinsam gesteuert werden.