Vorbereiten von Daten für den Massenexport oder -import

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

In diesem Abschnitt werden Überlegungen, die beim Planen für Massenexportvorgänge relevant sind, sowie die Anforderungen für Massenimportvorgänge erläutert.

Hinweis

Falls Sie sich in Bezug auf das Formatieren einer Datendatei für den Massenimport nicht sicher sind, verwenden Sie das Hilfsprogramm bcp, um Daten aus der Tabelle in eine Datendatei zu exportieren. Die Formatierung jedes Datenfelds in dieser Datei weist die Formatierung auf, die für den Massenimport von Daten in die entsprechende Tabellenspalte erforderlich ist. Verwenden Sie dieselbe Datenformatierung für die Felder Ihrer Datendatei.

Überlegungen zum Datendateiformat für den Massenexport

Bevor Sie mithilfe des Befehls bcp einen Massenexportvorgang ausführen, sollten Sie Folgendes berücksichtigen:

  • Wenn Daten in eine Datei exportiert werden, erstellt der Befehl bcp die Datendatei automatisch mithilfe des angegebenen Dateinamens. Wenn dieser Dateinamen bereits verwendet wird, überschreiben die Daten, die in die Datendatei massenkopiert werden, den vorhandenen Inhalt der Datei.

  • Zum Massenexportieren aus einer Tabelle oder Sicht in eine Datendatei ist die SELECT-Berechtigung für die massenkopierte Tabelle oder Sicht erforderlich.

  • SQL Server kann Daten mithilfe paralleler Scans abrufen. Daher ist normalerweise nicht sichergestellt, dass die Tabellenzeilen, die aus einer Instanz von SQL Server massenexportiert werden, sich in der Datendatei in einer bestimmten Reihenfolge befinden. Verwenden Sie die Option queryout für den Massenexport aus einer Abfrage, damit massenexportierte Tabellenzeilen in der Datendatei in einer bestimmten Reihenfolge angezeigt werden, und geben Sie eine ORDER BY-Klausel an.

Anforderungen an das Datendateiformat für den Massenexport

Zum Importieren von Daten in eine Datendatei muss die Datei die folgenden grundlegenden Anforderungen erfüllen:

  • Die Datei muss ein Zeilen- und Spaltenformat aufweisen.

Hinweis

Die Struktur der Datendatei muss nicht mit der Struktur der SQL Server-Tabelle übereinstimmen, da Spalten während des Massenimportprozesses ausgelassen oder neu geordnet werden können.

  • Die Daten in der Datendatei müssen ein unterstütztes Format aufweisen, z. B. ein Zeichen- oder systemeigenes Format.

  • Die Daten können ein Zeichenformat oder ein systemeigenes binäres Format, einschließlich Unicode, aufweisen.

  • Zum Importieren von Daten mithilfe des Befehls bcp, einer BULK INSERT-Anweisung oder einer INSERT ... SELECT * FROM OPENROWSET(BULK...)-Anweisung muss die Zieltabelle bereits vorhanden sein.

  • Jedes Feld in der Datendatei muss mit der entsprechenden Spalte in der Zieltabelle kompatibel sein. Ein int-Feld kann z. B. nicht in eine datetime-Spalte geladen werden. Weitere Informationen finden Sie unter Datenformate für Massenimport oder Massenexport (SQL Server) und Angeben von Datenformaten für die Kompatibilität bei Verwendung von bcp (SQL Server).

    Hinweis

    Sie können den Befehl bcp mit dem -F <first_row>-Schalter und/oder dem -L <last_row>-Schalter verwenden, um anstelle der gesamten Datei eine Teilmenge von Zeilen anzugeben, die aus einer Datendatei importiert werden sollen. Weitere Informationen finden Sie unter bcp Utility.

  • Zum Importieren von Daten aus Datendateien mit Feldern fester Länge oder Breite verwenden Sie eine Formatdatei. Weitere Informationen finden Sie unter XML-Formatdateien (SQL Server).

  • Ab SQL Server 2017 (14.x) kann eine CSV-Datei als Datendatei für einen Massenimport von Daten in SQL Server verwendet werden. Das Feldabschlusszeichen einer CSV-Datei muss kein Komma (,) sein. Die CSV-Datei muss den folgenden Einschränkungen entsprechen:

    • Datenfelder dürfen das Feldabschlusszeichen nicht enthalten.

    • Wenn Sie Felder in Anführungszeichen ("") setzen müssen, müssen Sie alle Datenfelder in Anführungszeichen setzen.

      Für den Massenimport von Daten aus einer Microsoft FoxPro- oder Visual FoxPro-Tabellendatei (.dbf) oder einer Microsoft Excel-Arbeitsblattdatei (.xls) müssen die Daten in eine CSV-Datei umgewandelt werden, die den vorangehenden Einschränkungen entspricht. Die Dateierweiterung lautet normalerweise .csv. Anschließend kann die .csv-Datei mit der Dateinamenerweiterung .csv als Datendatei in einem SQL Server-Massenimportvorgang verwendet werden.

      In 32-Bit-Systemen (SQL Server 2014 (12.x) und niedriger) ist es möglich, CSV-Daten mithilfe von 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. Bei CSV-Daten wäre einer der Parameter in der schema.ini-Datei "FORMAT=CSVDelimited". Für diese Lösung müssen Sie über Kenntnisse über die Text-IISAM-Vorgänge von Jet (die zugehörige Syntax für Verbindungszeichenfolgen, die Verwendung von schema.ini, die Einstellungsoptionen für die Registrierung usw.) verfügen. Die besten Informationsquellen hierfür sind die Microsoft Access-Hilfe und Knowledge Base (KB)-Artikel. Weitere Informationen finden Sie unter Initializing the Text Data Source Driver, Verwendung eine verteilten Abfrage von SQLServer 7.0 mit einem verknüpften Server gesicherten Access-Datenbanken(maschinell übersetzter Artikel), Verwendung von Jet OLE DB-Provider 4.0 an ISAM-Datenbanken(maschinell übersetzter Artikel) und Gewusst wie: Öffnen Sie getrennte Textdateien mit der Jet-Provider Text IIsam (maschinell übersetzter Artikel).

Darüber hinaus ist Folgendes für den Massenimport von Daten aus einer Datendatei in eine Tabelle erforderlich:

  • Benutzer müssen über INSERT- und SELECT-Berechtigungen für die Tabelle verfügen. Benutzer müssen auch über eine ALTER TABLE-Berechtigung verfügen, wenn sie Optionen wie das Deaktivieren von Einschränkungen verwenden, für die -DDL-Vorgänge (Data Definition Language) erforderlich sind.

  • Wenn Sie für das Massenimportieren von Daten BULK INSERT oder INSERT ... SELECT * FROM OPENROWSET(BULK...) verwenden, muss entweder das Sicherheitsprofil des SQL Server-Prozesses (wenn sich der Benutzer mit dem bereitgestellten SQL Server-Anmeldenamen anmeldet) oder die Microsoft Windows-Anmeldung, die beim Delegieren der Sicherheit verwendet wird, über Zugriff für Lesevorgänge auf die Datendatei verfügen. Der Benutzer muss über eine ADMINISTER BULK OPERATIONS-Berechtigung für die Datei verfügen.

Hinweis

Das Massenimportieren in eine partitionierte Sicht wird nicht unterstützt, und Versuche, einen Massenimport von Daten in eine partitionierte Sicht auszuführen, schlagen fehl.