Durchführen von Massenkopiervorgängen
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
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.
OLE DB-Treiber für SQL Server
Der OLE DB-Treiber für SQL Server 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 OLE DB-Treiber für SQL Server 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 OLE DB-Treiber für SQL Server, dass ein Massenkopiervorgang ausgeführt werden soll, indem er die treiberspezifische Datenquelleneigenschaft SSPROP_ENABLEFASTLOAD des OLE DB-Treibers für SQL Server auf VARIANT_TRUE festlegt. Wenn diese Eigenschaft für die Datenquelle festgelegt wurde, erstellt der Consumer eine OLE DB-Treiber für SQL Server-Sitzung. 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 zum Massenkopieren schränkt die OLE DB-Treiber für SQL Server-Unterstützung für Schnittstellen in dieser Sitzung ein. Eine Sitzung mit aktivierter Massenkopierfunktion bietet lediglich die folgenden Schnittstellen:
IDBSchemaRowset
IGetDataSource
IOpenRowset
ISupportErrorInfo
ITransactionJoin
Um die Erstellung massenkopierter Rowsets zu deaktivieren und die Sitzung des OLE DB-Treibers für SQL Server auf die Standardverarbeitungsweise zurückzusetzen, setzen Sie SSPROP_ENABLEFASTLOAD auf VARIANT_FALSE zurück.
IRowsetFastLoad Rowsets
Die massenkopierten Rowsets im OLE DB-Treiber für SQL Server weisen nur Schreibzugriff auf, machen jedoch Schnittstellen verfügbar, die dem Consumer ermöglichen, die Struktur einer SQL Server-Tabelle zu bestimmen. Die folgenden Schnittstellen sind in einem OLE DB-Treiber für SQL Server-Rowset verfügbar, in dem die Massenkopierfunktion aktiviert ist:
IAccessor
IColumnsInfo
IColumnsRowset
IConvertType
IRowsetFastLoad
IRowsetInfo
ISupportErrorInfo
Die anbieterspezifischen Eigenschaften SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS und SSPROP_FASTLOADKEEPIDENTITY steuern die Verhaltensweisen des Massenkopierrowsets eines OLE DB-Treibers für SQL Server. Die Eigenschaften werden im rgProperties-Element eines rgPropertySets IOpenRowset-Parameterelements angegeben.
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 OLE DB-Treiber für SQL Server 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 OLE DB-Treibers für SQL Server eine Zeile einfügt, die einen NULL-Wert für die Spalte enthält. VARIANT_TRUE: SQL Server fügt einen NULL-Wert für den Spaltenwert ein, wenn der Consumer des OLE DB-Treibers für SQL Server eine Zeile einfügt, die einen NULL-Wert für die Spalte enthält. |
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 OLE DB-Treiber für SQL Server implementiert die IBCPSession-Schnittstelle, um die Unterstützung für SQL Server-dateibasierte Massenkopiervorgänge verfügbar zu machen. Die IBCPSession-Schnittstelle implementiert die IBCPSession::BCPColFmt, IBCPSession::BCPColumns, IBCPSession::BCPControl, IBCPSession::BCPSession::BCPSession::BCPExec, IBCPSession::BCPInit, IBCPSession::BCPReadFmt, and IBCPSession::BCPWriteFmt-Methoden.
Weitere Informationen
OLE DB-Treiber für SQL Server-Features
Datenquelleneigenschaften (OLE DB)
Massenimport und -export von Daten (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)