Freigeben über


Durchführen von Massenkopiervorgängen

Das Sql Server-Massenkopie-Feature unterstützt die Übertragung großer Datenmengen in oder aus einer SQL Server-Tabelle oder -Ansicht. Daten können auch durch Angabe einer SELECT-Anweisung übertragen werden. Die Daten können zwischen SQL Server und einer Betriebssystemdatendatei verschoben werden, z. B. einer ASCII-Datei. Die Datendatei kann unterschiedliche Formate aufweisen; das Format ist für die Massenkopie in einer Formatdatei definiert. Optional können Daten in Programmvariablen geladen und mithilfe von Massenkopiefunktionen und -methoden an SQL Server übertragen werden.

Eine Beispielanwendung, die dieses Feature veranschaulicht, finden Sie unter "Massenkopie von Daten mithilfe von IRowsetFastLoad (OLE DB)".

Eine Anwendung verwendet in der Regel Massenkopien auf eine der folgenden Arten:

  • Massenkopie aus einer Tabelle, Ansicht oder dem Resultset einer Transact-SQL-Anweisung in eine Datendatei, in der die Daten im selben Format wie die Tabelle oder Ansicht gespeichert sind.

    Dies wird als Datendatei im nativen Modus bezeichnet.

  • Massenkopie aus einer Tabelle, Ansicht oder dem Resultset einer Transact-SQL-Anweisung in eine Datendatei, in der die Daten in einem anderen Format als der Tabelle oder Ansicht gespeichert sind.

    In diesem Fall wird eine separate Formatdatei erstellt, die die Merkmale (Datentyp, Position, Länge, Terminator usw.) jeder Spalte definiert, wie sie in der Datendatei gespeichert ist. Wenn alle Spalten in das Zeichenformat konvertiert werden, wird die resultierende Datei als Datendatei für den Zeichenmodus bezeichnet.

  • Massenkopie aus einer Datendatei in eine Tabelle oder Ansicht.

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

  • Laden Sie Daten in Programmvariablen, importieren Sie dann die Daten in eine Tabelle oder Ansicht, indem Sie die Massenkopiefunktionen zum Massenkopienvorgang in einer Zeile gleichzeitig verwenden.

Datendateien, die von Massenkopiefunktionen verwendet werden, müssen nicht von einem anderen Massenkopieprogramm erstellt werden. Jedes andere System kann eine Datendatei und -formatierungsdatei entsprechend den Massenkopiedefinitionen generieren; Diese Dateien können dann mit einem SQL Server-Massenkopieprogramm verwendet werden, um Daten in SQL Server zu importieren. Sie können z. B. Daten aus einer Kalkulationstabelle in einer durch Tabstopp getrennten Datei exportieren, eine Formatdatei erstellen, die die datei mit Tabstopptrennzeichen beschreibt, und dann ein Massenkopieprogramm verwenden, um die Daten schnell in SQL Server zu importieren. Datendateien, die durch Massenkopie generiert werden, können auch in andere Anwendungen importiert werden. Sie können beispielsweise Massenkopiefunktionen verwenden, um Daten aus einer Tabelle oder Ansicht in eine durch Tabstopp getrennte Datei zu exportieren, die dann in eine Kalkulationstabelle geladen werden kann.

Programmierer, die Anwendungen codieren, um die Massenkopiefunktionen zu verwenden, sollten den allgemeinen Regeln für eine gute Leistung bei Massenkopien entsprechen. Weitere Informationen zur Unterstützung von Massenkopievorgängen in SQL Server finden Sie unter Massenimport und -export von Daten (SQL Server).For more information about support for bulk copy operations in SQL Server, see Bulk Import and Export of Data (SQL Server).

Einschränkungen und Beschränkungen

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

Verwenden Sie SET FMTONLY OFF nicht mit Massenkopievorgängen. SET FMTONLY OFF kann dazu führen, dass der Massenkopievorgang fehlschlägt oder unerwartete Ergebnisse erzielt.

SQL Server Native Client OLE DB-Anbieter

Der OLE DB-Anbieter von SQL Server Native Client implementiert zwei Methoden zum Ausführen von Massenkopievorgängen mit einer SQL Server-Datenbank. Die erste Methode umfasst die Verwendung der IRowsetFastLoad-Schnittstelle für speicherbasierte Massenkopievorgänge; und die zweite umfasst die Verwendung der IBCPSession-Schnittstelle für dateibasierte Massenkopievorgänge.

Verwenden von speicherbasierten Massenkopievorgängen

Der OLE DB-Anbieter von SQL Server Native Client implementiert die IRowsetFastLoad-Schnittstelle , um unterstützung für speicherbasierte Massenkopievorgänge von SQL Server 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-Anbieter von SQL Server Native Client über die Notwendigkeit einer Massenkopie, indem die anbieterspezifische SQL Server Native Client OLE DB-Eigenschaft SSPROP_ENABLEFASTLOAD auf VARIANT_TRUE festgelegt wird. Wenn die Eigenschaft für die Datenquelle festgelegt ist, erstellt der Consumer eine SQL Server Native Client OLE DB-Anbietersitzung. Die neue Sitzung ermöglicht den Consumerzugriff auf die IRowsetFastLoad-Schnittstelle .

Hinweis

Wenn die IDataInitialize-Schnittstelle zum Initialisieren der Datenquelle verwendet wird, ist es erforderlich, die SSPROP_IRowsetFastLoad-Eigenschaft im rgPropertySets-Parameter der IOpenRowset::OpenRowset-Methode festzulegen; andernfalls gibt der Aufruf der OpenRowset-Methode E_NOINTERFACE zurück.

Das Aktivieren einer Sitzung für Massenkopien schränkt die UNTERSTÜTZUNG des OLE DB-Anbieters für SQL Server Native Client für Schnittstellen in der Sitzung ein. Eine Massenkopie-aktivierte Sitzung macht nur die folgenden Schnittstellen verfügbar:

  • IDBSchemaRowset

  • IGetDataSource

  • IOpenRowset

  • ISupportErrorInfo

  • ITransactionJoin

Um die Erstellung von Massenkopie-aktivierten Rowsets zu deaktivieren und die SQL Server Native Client OLE DB-Anbietersitzung auf die Standardverarbeitung zurückzusetzen, setzen Sie SSPROP_ENABLEFASTLOAD auf VARIANT_FALSE zurück.

IRowsetFastLoad-Rowsets

Die Ole DB-Massenkopie-Rowsets des SQL Server Native Client-Anbieters sind schreibgeschützt, aber sie machen Schnittstellen verfügbar, die es dem Consumer ermöglichen, die Struktur einer SQL Server-Tabelle zu bestimmen. Die folgenden Schnittstellen werden in einem Massenkopie-aktivierten OLE DB-Anbieter-Rowset für SQL Server Native Client verfügbar gemacht:

  • IAccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

Die anbieterspezifischen Eigenschaften SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS und SSPROP_FASTLOADKEEPIDENTITY Steuerelementverhalten eines OLE DB-Anbieters eines OLE DB-Anbieters mit Massenkopien von SQL Server. Die Eigenschaften werden im rgProperties-Element eines rgPropertySetsIOpenRowset-Parametermemmangegeben.

Eigenschaften-ID BESCHREIBUNG
SSPROP_FASTLOADKEEPIDENTITY Spalte: Nein

R/W: Lese-/Schreibzugriff

Typ: VT_BOOL

Standard: VARIANT_FALSE

Beschreibung: Verwaltet vom Verbraucher bereitgestellte Identitätswerte.

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

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

R/W: Lese-/Schreibzugriff

Typ: VT_BOOL

Standard: VARIANT_FALSE

Beschreibung: Verwaltet NULL für Spalten mit einer DEFAULT-Einschränkung. Betrifft nur SQL Server-Spalten, die NULL akzeptieren und eine DEFAULT-Einschränkung angewendet haben.

VARIANT_FALSE: SQL Server fügt den Standardwert für die Spalte ein, wenn der SQL Server Native Client OLE DB-Anbieter eine Zeile einfügt, die NULL für die Spalte enthält.

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

R/W: Lese-/Schreibzugriff

Typ: VT_BSTR

Standard: keine

Beschreibung: Diese Eigenschaft ist identisch mit dem "-h "hint[,... n]" option of the bcp utility. Die folgenden Zeichenfolgen können als Option(en) im Massenkopiervorgang von Daten in eine Tabelle verwendet werden.

ORDER(column[ASC DESC | ][,...n]): Sortierreihenfolge von Daten in der Datendatei. Die Leistung von Massenkopien wird verbessert, wenn die geladene Datendatei nach dem gruppierten Index in der Tabelle sortiert wird.

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

= KILOBYTES_PER_BATCHcc: Anzahl der Kilobytes (KB) von Daten pro Batch (als cc). Standardmäßig ist KILOBYTES_PER_BATCH unbekannt.

TABLOCK: Eine Sperrung auf Tabellenebene wird für die Dauer des Massenkopievorgangs abgerufen. Diese Option verbessert die Leistung erheblich, da das Halten einer Sperre nur für die Dauer des Massenkopievorgangs die Sperrung der Tabelle verringert. Eine Tabelle kann von mehreren Clients gleichzeitig geladen werden, wenn die Tabelle keine Indizes aufweist und TABLOCK angegeben ist. Standardmäßig wird das Sperrverhalten durch die Tabellenoptionstabellensperre beim Massenladevorgang bestimmt.

CHECK_CONSTRAINTS: Alle Einschränkungen für table_name werden während des Massenkopievorgangs überprüft. Standardmäßig werden Einschränkungen ignoriert.

FIRE_TRIGGER: SQL Server verwendet Zeilenversionsverwaltung für Trigger und speichert die Zeilenversionen im Versionsspeicher in tempdb. Daher sind Optimierungen der Massenprotokollierung auch dann verfügbar, wenn Trigger aktiviert sind. Bevor Sie einen Batch mit einer großen Anzahl von Zeilen mit aktivierten Triggern importieren, müssen Sie möglicherweise die Größe von tempdb erweitern.

Verwenden von dateibasierten Massenkopievorgängen

Der OLE DB-Anbieter von SQL Server Native Client implementiert die IBCPSession-Schnittstelle , um Unterstützung für dateibasierte SQL Server-Massenkopievorgä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.

ODBC-Treiber für SQL Server Native Client

Der ODBC-Treiber für SQL Server Native Client verwaltet die gleiche Unterstützung für Massenkopievorgänge, die Teil früherer Versionen des SQL Server ODBC-Treibers waren. Informationen zu Massenkopievorgängen mithilfe des SQL Server Native Client ODBC-Treibers finden Sie unter Ausführen von Massenkopievorgängen (ODBC).For information about bulk copy operations using the SQL Server Native Client ODBC driver, see Performing Bulk Copy Operations (ODBC).

Siehe auch

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