Freigeben über


Durchführen von Massenkopiervorgängen

Die Massenkopierfunktion von SQL Server unterstützt die Übertragung großer Datenmengen in bzw. aus einer SQL Server-Tabelle oder Sicht. Daten können auch mithilfe einer SELECT-Anweisung aus einer Tabelle oder Sicht übertragen werden. Die Daten können zwischen SQL Server und einer Betriebssystemdatendatei verschoben werden, z. B. eine ASCII-Datei. Datendateien können verschiedene Formate aufweisen. Das Format wird in einer Formatdatei definiert. Optional können die Daten in Programmvariablen geladen und mithilfe von Massenkopierfunktionen und -methoden in SQL Server übertragen werden.

Eine Beispielanwendung zur Veranschaulichung dieses Features finden Sie unter Massenkopieren von Daten mithilfe von IRowsetFastLoad (OLE DB).

Eine Anwendung verwendet Massenkopiervorgänge in der Regel in einer der folgenden Arten:

  • Massenkopieren aus einer Tabelle, Sicht oder dem Resultset einer Transact-SQL-Anweisung in eine Datendatei, in der die Daten im selben Format gespeichert werden wie in der Tabelle bzw. Sicht.

    Diese Datei wird als Datendatei im einheitlichen Modus bezeichnet.

  • Massenkopieren aus einer Tabelle, Sicht oder dem Resultset einer Transact-SQL-Anweisung in eine Datendatei, in der die Daten in einem anderen Format gespeichert werden als in der Tabelle bzw. Sicht.

    In diesem Fall wird eine separate Formatdatei erstellt, in der die Charakteristika (Datentyp, Position, Länge, Abschlusszeichen, usw.) der einzelnen, in der Datendatei zu speichernden Spalten definiert werden. Wenn alle Spalten in Zeichenformat konvertiert werden, wird die resultierende Datei als Datendatei im Zeichenmodus bezeichnet.

  • Massenkopieren aus einer Datendatei in eine Tabelle oder Sicht.

    Gegebenenfalls wird eine Formatdatei verwendet, um das Layout der Datendatei zu bestimmen.

  • Laden der Daten in Programmvariablen und anschließender Import der Daten in eine Tabelle oder Sicht unter Verwendung der Massenkopierfunktionen für das Massenkopieren von jeweils einer Zeile.

Datendateien, die von Massenkopierfunktionen verwendet werden, brauchen nicht von einem anderen Massenkopierprogramm erstellt worden sein. Beliebige andere Systeme können entsprechend den Massenkopierdefinitionen Datendateien und Formatdateien generieren. Diese Dateien können dann mit einem SQL Server-Massenkopierprogramm verwendet werden, um Daten in SQL Server zu importieren. Beispielsweise könnten Sie Daten aus einer Kalkulationstabelle in eine durch Tabstopps getrennte Datei exportieren, eine die durch Tabstopps getrennte Datei in einer Formatdatei beschreiben und schließlich mithilfe eines Massenkopierprogramms die Daten in SQL Server importieren. Datendateien, die mit einer Massenkopierfunktion generiert wurden, können auch in andere Anwendungen importiert werden. Beispielsweise könnten Sie Massenkopierfunktionen verwenden, um Daten aus einer Tabelle oder Sicht in eine durch Tabstopps getrennte Datei zu exportieren, die Sie dann in eine Kalkulationstabelle laden.

Programmierern von Anwendungen, die Massenkopierfunktionen verwenden, wird empfohlen, folgende allgemeine Regeln zu beachten, um die Leistung des Massenkopierens zu gewähren. Weitere Informationen zur Unterstützung von Massenladevorgängen in SQL Server finden Sie unter Massenimport und -export von Daten (SQL Server).

Einschränkungen

Ein CLR-benutzerdefinierter Typ (User Defined Type, UDT) muss als Binärdaten gebunden werden. Auch wenn eine Formatdatei SQLCHAR als Datentyp für eine Ziel-UDT-Spalte angibt, verarbeitet das BCP-Hilfsprogramm die Daten als Binärdaten.

SET FMTONLY OFF kann nicht mit Massenkopiervorgängen verwendet werden. SET FMTONLY OFF führt möglicherweise bei Massenkopiervorgängen zu unerwarteten Ergebnissen oder Fehlern.

SQL Server Native Client OLE DB-Anbieter

Der SQL Server Native Client OLE DB-Anbieter implementiert zwei Methoden zum Ausführen von Massenkopiervorgängen mit einer SQL Server-Datenbank. Bei der ersten Methode kommt die IRowsetFastLoad-Schnittstelle für speicherbasierte Massenkopiervorgänge zur Anwendung. Die zweite Methode stützt sich auf die IBCPSession-Schnittstelle für dateibasierte Massenkopiervorgänge.

Verwenden von speicherbasierten Massenkopiervorgängen

Der SQL Server Native Client OLE DB-Anbieter implementiert die IRowsetFastLoad-Schnittstelle, um die Unterstützung für SQL Server speicherbasierte Massenkopiervorgänge verfügbar zu machen. Die IRowsetFastLoad-Schnittstelle implementiert die Methoden IRowsetFastLoad::Commit und IRowsetFastLoad::InsertRow.

Aktivieren einer Sitzung für IRowsetFastLoad

Der Consumer benachrichtigt den SQL Server Native Client OLE DB-Anbieter über die Notwendigkeit des Massenkopiervorgangs, indem er die SQL Server Native Client anbieterspezifische Datenquelleneigenschaft SSPROP_ENABLEFASTLOAD auf VARIANT_TRUE festlegt. Wenn die -Eigenschaft für die Datenquelle festgelegt ist, erstellt der Consumer eine SQL Server Native Client OLE DB-Anbietersitzung. Die neue Sitzung lässt den Zugriff des Consumers auf die IRowsetFastLoad-Schnittstelle zu.

Hinweis

Wenn die IDataInitialize-Schnittstelle für die Initialisierung der Datenquelle verwendet wird, muss die SSPROP_IRowsetFastLoad-Eigenschaft im rgPropertySets-Parameter der IOpenRowset::OpenRowset-Methode festgelegt werden. Andernfalls gibt der Aufruf der OpenRowset-Methode E_NOINTERFACE zurück.

Das Aktivieren einer Sitzung für Massenkopiervorgänge schränkt die unterstützung des SQL Server Native Client OLE DB-Anbieters für Schnittstellen in der Sitzung ein. Eine Sitzung mit aktivierter Massenkopierfunktion bietet lediglich die folgenden Schnittstellen:

  • IDBSchemaRowset

  • IGetDataSource

  • IOpenRowset

  • ISupportErrorInfo

  • ITransactionJoin

Um die Erstellung von Massenkopiersets zu deaktivieren und die SQL Server Native Client OLE DB-Anbietersitzung zur Standardverarbeitung zu rückgängig machen, setzen Sie SSPROP_ENABLEFASTLOAD auf VARIANT_FALSE zurück.

IRowsetFastLoad Rowsets

Die SQL Server Native Client OLE DB-Anbieter-Massenkopierrowsets sind schreibgeschützt, aber sie machen Schnittstellen verfügbar, mit denen der Consumer die Struktur einer SQL Server Tabelle bestimmen kann. Die folgenden Schnittstellen werden für ein massenkopiertes SQL Server Native Client OLE DB-Anbieterrowset verfügbar gemacht:

  • IAccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

Die anbieterspezifischen Eigenschaften SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS und SSPROP_FASTLOADKEEPIDENTITY das Verhalten eines SQL Server Native Client OLE DB-Anbieters mit Massenkopierer. Die Eigenschaften werden im rgProperties-Member eines rgPropertySets-IOpenRowset-Parameterelementsangegeben.

Eigenschafts-ID BESCHREIBUNG
SSPROP_FASTLOADKEEPIDENTITY Spalte: Nein

R/W: Lesen/Schreiben

Typ: VT_BOOL

Standardwert: VARIANT_FALSE

Beschreibung: Verwaltet vom Consumer angegebene Identitätswerte.

VARIANT_FALSE: Werte für eine Identitätsspalte in der SQL Server-Tabelle werden von SQL Server generiert. Alle für die Spalte gebundenen Werte werden vom SQL Server Native Client OLE DB-Anbieter ignoriert.

VARIANT_TRUE: Der Consumer bindet einen Accessor, der einen Wert für eine SQL Server-Identitätsspalte bereitstellt. Die IDENTITY-Eigenschaft ist nicht für Spalten verfügbar, die NULL-Werte akzeptieren, daher stellt der Consumer für jeden IRowsetFastLoad::Insert-Aufruf einen eindeutigen Wert bereit.
SSPROP_FASTLOADKEEPNULLS Spalte: Nein

R/W: Lesen/Schreiben

Typ: VT_BOOL

Standardwert: VARIANT_FALSE

Beschreibung: Behält NULL-Werte für Spalten mit einer DEFAULT-Einschränkung bei. Betrifft nur SQL Server-Spalten, die NULL-Werte akzeptieren und eine DEFAULT-Einschränkung aufweisen.

VARIANT_FALSE: SQL Server fügt den Standardwert für die Spalte ein, wenn der Consumer des SQL Server Native Client OLE DB-Anbieters eine Zeile mit NULL für die Spalte einfügt.

VARIANT_TRUE: SQL Server fügt NULL für den Spaltenwert ein, wenn der SQL Server Native Client OLE DB-Anbieter consumer eine Zeile mit NULL für die Spalte einfügt.
SSPROP_FASTLOADOPTIONS Spalte: Nein

R/W: Lesen/Schreiben

Typ: VT_BSTR

Standardwert: keiner

Beschreibung: Diese Eigenschaft ist mit der -h "hint[,...n]"-Option des BCP-Hilfsprogramms identisch. Die folgende(n) Zeichenfolge(n) kann/können beim Massenkopieren von Daten in eine Tabelle optional verwendet werden.

ORDER(column[ASC | DESC][,...n]): Sortierreihenfolge der Daten in der Datendatei. Die Leistung des Massenkopierens wird verbessert, wenn die zu ladende Datendatei entsprechend dem gruppierten Index der Tabelle sortiert ist.

ROWS_PER_BATCH = bb: Die Anzahl von Datenzeilen pro Batch (als bb). Der Server optimiert das Massenladen entsprechend dem Wert von bb. Standardmäßig ist ROWS_PER_BATCH unbekannt.

KILOBYTES_PER_BATCH = cc: Anzahl von Kilobyte (KB) an Daten pro Batch (als „cc“). Standardmäßig ist KILOBYTES_PER_BATCH unbekannt.

TABLOCK: Für die Dauer des Massenimportvorgangs wird eine Sperre auf Tabellenebene aktiviert. Diese Option verbessert die Leistung beträchtlich, da weniger Sperrkonflikte für die Tabelle auftreten, wenn diese nur während des Massenkopiervorgangs gesperrt wird. Eine Tabelle kann gleichzeitig von mehreren Clients geladen werden, wenn die Tabelle keine Indizes aufweist und TABLOCK angegeben ist. Standardmäßig wird das Sperrverhalten durch die Tabellenoption table lock on bulk load bestimmt.

CHECK_CONSTRAINTS: Alle Einschränkungen fürtable_name werden während des Massenkopiervorgangs überprüft. Standardmäßig werden Einschränkungen ignoriert.

FIRE_TRIGGER: SQL Server verwendet die Zeilenversionsverwaltung für Trigger und speichert die Zeilenversionen im Versionsspeicher in tempdb. Deshalb sind Massenprotokollierungsoptimierungen verfügbar, auch wenn Trigger aktiviert sind. Bevor Sie einen Massenimport eines Batches mit einer großen Anzahl von Zeilen vornehmen, für die Trigger aktiviert sind, müssen Sie gegebenenfalls die Größe von tempdb erweitern.

Verwenden von dateibasierten Massenkopiervorgängen

Der SQL Server Native Client OLE DB-Anbieter implementiert die IBCPSession-Schnittstelle, um unterstützung für SQL Server dateibasierte Massenkopiervorgänge verfügbar zu machen. Die IBCPSession-Schnittstelle implementiert die Methoden IBCPSession::BCPColFmt, IBCPSession::BCPColumns, IBCPSession::BCPControl, IBCPSession::BCPDone, IBCPSession::BCPExec, IBCPSession::BCPInit, IBCPSession::BCPReadFmt und IBCPSession::BCPWriteFmt.

ODBC-Treiber für SQL Server Native Client

Der SQL Server Native Client ODBC-Treiber bietet dieselbe Unterstützung für Massenkopiervorgänge, die Teil früherer Versionen des SQL Server ODBC-Treibers waren. Informationen zu Massenkopiervorgängen mit dem SQL Server Native Client ODBC-Treiber finden Sie unter Ausführen von Massenkopiervorgängen (ODBC).

Weitere Informationen

SQL Server Native Client-Funktionen
Datenquelleneigenschaften (OLE DB)
Massenimport und -export von Daten (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)
Optimieren der Leistung des Massenimports