Informationen zu Massenimport- und Massenexportvorgängen

In SQL Server wird der Massenexport von Daten aus einer SQL Server-Tabelle und der Massenimport in eine SQL Server-Tabelle oder eine nicht partitionierte Sicht unterstützt. Dazu stehen die folgenden grundlegenden Methoden zur Verfügung.

Methode

Beschreibung

Importiert Daten

Exportiert Daten

Hilfsprogramm bcp

Ein Befehlszeilenprogramm (Bcp.exe), mit dem Massenexporte und -importe von Daten ausgeführt und Formatdateien generiert werden können.

Ja

Ja

BULK INSERT-Anweisung

Eine Transact-SQL-Anweisung, mit der Daten direkt aus einer Datendatei in eine Datenbanktabelle oder nicht partitionierte Sicht importiert werden.

Ja

Nein

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

Eine Transact-SQL-Anweisung, bei der mit dem OPENROWSET-Massenrowsetanbieter ein Massenimport von Daten in eine SQL Server-Tabelle ausgeführt wird. Dabei wird die OPENROWSET(BULK…)-Funktion angegeben, um Daten in einer INSERT-Anweisung auszuwählen.

Ja

Nein

Einschränkungen

SQL Server-Massenimportvorgänge unterstützen das Importieren von Daten aus CSV (Comma-Separated Value)-Dateien nicht. In 32-Bit-Systemen ist es jedoch möglich, CSV-Daten mit OPENROWSET mit dem OLE DB-Anbieter für Jet in eine SQL Server-Tabelle ohne Massenimportoptimierungen zu importieren. Jet behandelt Textdateien als Tabellen mit dem durch eine schema.ini-Datei, die sich im gleichen Verzeichnis wie die Datenquelle befindet, festgelegten Schema. Für CSV-Daten ist einer der Parameter in der Datei schema.ini "FORMAT=CSVDelimited". Für diese Lösung ist das Verständnis der Jet Test IISAMm-Vorgänge – die Verbindungszeichenfolgensyntax, Verwendung von schema.ini, Einstellungsoptionen für die Registrierung usw. – erforderlich. Die besten Informationsquellen hierfür sind die Microsoft Access-Hilfe und Knowledge Base (KB)-Artikel. Weitere Informationen finden Sie unter Initialisieren des Text-Datenquellentreibers, Wie Verwenden einer verteilten Abfrage von SQL Server 7.0 mit einem Verknüpfter Server zu gesicherter Access-Datenbank (maschinell übersetzter Artikel) und Welcher VERFAHRENSWEISE: TO: Sie verwenden OLE DB Provider Jet zu ISAM-Datenbanken Verbinden mit 4.0 (maschinell übersetzter Artikel) sowie Wie Öffnen von Textdatei mit Trennzeichen, die das Textiisam des Jetanbieters verwendet (maschinell übersetzter Artikel).

In-Process- im Vergleich zu Out-of-Process-Vorgängen

Die BULK INSERT-Anweisung und die OPENROWSET(BULK)-Funktion werden im Prozess mit SQL Server ausgeführt. Dabei wird derselbe Arbeitsspeicheradressraum verwendet. Weil die Datendateien durch einen SQL Server-Prozess geöffnet werden, findet kein Kopieren von Daten zwischen Clientprozess und SQL Server-Prozessen statt. Informationen zu Sicherheitsaspekten beim Importieren von Daten mithilfe von BULK INSERT oder INSERT ... SELECT * FROM OPENROWSET(BULK...) finden Sie unter Importieren von Massendaten mithilfe von BULK INSERT oder OPENROWSET(BULK...).

Im Gegensatz dazu wird das Hilfsprogramm bcp außerhalb des Prozesses ausgeführt. Zum Verschieben von Daten über Prozessspeicherräume hinweg muss von bcp ein prozessübergreifendes Daten-Marshalling verwendet werden. Als prozessübergreifendes Daten-Marshalling wird der Prozess der Konvertierung von Parametern eines Methodenaufrufs in einen Datenstrom bezeichnet. Dadurch kann die Auslastung des Prozessors signifikant steigen. Da allerdings von bcp die Daten analysiert und Daten in ein systemeigenes Speicherformat im Clientprozess konvertiert werden, kann der SQL Server-Prozess dadurch von der Analyse und der Datenkonvertierung entlastet werden. Wenn die Leistungsfähigkeit der CPU also eingeschränkt ist, kann die Verwendung von bcp auf einem Computer mit mehreren CPUs oder auf verschiedenen Computern für den Massenimport bessere Ergebnisse liefern als die Verwendung von BULK INSERT oder INSERT ... SELECT * FROM OPENROWSET(BULK).

Formatdateien

Das Hilfsprogramm bcp sowie die Anweisungen BULK INSERT und INSERT ... SELECT * FROM OPENROWSET(BULK...) unterstützen alle die Verwendung einer als Formatdatei bezeichneten speziellen Datei zum Speichern von Formatinformationen für jedes Feld in einer Datendatei. In einer Formatdatei können auch Informationen zu der korrespondierenden SQL Server-Tabelle enthalten sein. Über die Formatdatei können alle Formatinformationen bereitgestellt werden, die für den Massenexport von Daten aus einer Instanz und für den Massenimport von Daten in eine Instanz von SQL Server erforderlich sind.

Formatdateien bieten eine flexible Möglichkeit zum Interpretieren von Daten, wie diese in der Datendatei während des Imports vorhanden sind, und zum Formatieren von Daten in der Datendatei während des Exports. Durch diese Flexibilität besteht nicht mehr die Notwendigkeit, einen speziellen Code für das Interpretieren der Daten zu schreiben oder die Daten für die speziellen Anforderungen von SQL Server oder der externen Anwendung umzuformatieren. Wenn Sie beispielsweise einen Massenexport von Daten ausführen, die in eine Anwendung geladen werden sollen, für die durch Trennzeichen getrennte Werte erforderlich sind, können Sie eine Formatdatei verwenden, um Kommas als Feldabschlusszeichen in den exportierten Daten einzufügen.

SQL Server 2005 und höhere Versionen unterstützen zwei Typen von Formatdateien: XML-Formatdateien und Nicht-XML-Formatdateien. Nicht-XML-Formatdateien werden von früheren Versionen von SQL Server unterstützt; XML-Formatdateien sind neu in SQL Server 2005.

Formatdateien können nur mithilfe des Hilfsprogramms bcp generiert werden. Weitere Informationen finden Sie unter Erstellen einer Formatdatei. Weitere Informationen zu Formatdateien finden Sie unter Formatdateien zum Importieren oder Exportieren von Daten.

HinweisHinweis

Wenn keine Formatdatei während eines Massenexport- oder Massenimportvorgangs zur Verfügung steht, kann der Benutzer die Standardformatierung mithilfe der Befehlszeile überschreiben.

Abfrageprozessor und Massenimport

Der Massenimport von Daten in eine Instanz von SQL Server erfolgt beim Hilfsprogramm bcp und den Anweisungen BULK INSERT und INSERT ... SELECT * FROM OPENROWSET(BULK...) mithilfe des Abfrageprozessors.

Von allen drei Methoden werden die Daten in der Datendatei in OLE DB-Rowsets konvertiert. Die Konvertierungsmethode variiert jedoch wie folgt:

  • Vom Hilfsprogramm bcp wird die Datendatei gelesen und ein TDS-Datenstrom an die BCP-API (Bulk Copy Program) in SQL Server gesendet, worauf die Daten in OLE DB-Rowsets konvertiert werden.

  • Mithilfe von BULK INSERT und dem OPENROWSET-Massenrowsetanbieter wird eine Datendatei jeweils direkt in ein OLE DB-Rowset konvertiert.

Die OLE DB-Rowsets werden vom Abfrageprozessor, von dem jeder Vorgang geplant und optimiert wird, in die Zieltabelle eingefügt.

Leistungsaspekte

Leistungsaspekte können eine wichtige Rolle spielen, wenn große Datenmengen importiert werden. In einigen Fällen kann die Leistung optimiert werden, indem Sie die Art ändern, wie die folgenden Punkte von Massenimport- oder Massenexportvorgängen behandelt werden:

  • Batchoptionen

  • Einschränkungsüberprüfung von CHECK-Einschränkungen

  • Wie Massentransaktionen protokolliert werden. Dies ist relevant für Datenbanken, für die das vollständige Wiederherstellungsmodell verwendet wird.

  • Sortieren exportierter Daten

  • Paralleler Datenimport

  • Tabellensperrung

  • Triggerausführung

Weitere Informationen finden Sie unter Optimieren der Leistung des Massenimportierens.

HinweisHinweis

Für Massenexportvorgänge gibt es keine speziellen Optimierungsverfahren. Beim Massenexportvorgang werden einfach mithilfe einer SELECT-Anweisung Daten aus der Quelltabelle ausgewählt.