Verwenden des nativen Formats zum Importieren oder Exportieren von Daten (SQL Server)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Das native Format wird für die Massenübertragung von Daten zwischen mehreren Instanzen von SQL Server mithilfe einer Datendatei empfohlen, die keinen erweiterten Zeichensatz bzw. Doppelbyte-Zeichensatz (Double-Byte Character Set, DBCS) enthält.

Hinweis

Für die Massenübertragung von Daten zwischen mehreren Instanzen von SQL Server mithilfe einer Datendatei, die erweiterte Zeichen oder DBCS-Zeichen enthält, sollten Sie das systemeigene Unicode-Format verwenden. Weitere Informationen finden Sie unter Verwenden des nativen Unicode-Formats zum Importieren oder Exportieren von Daten (SQL Server).

Das systemeigene Format erhält die systemeigenen Datentypen einer Datenbank. Das systemeigene Format ist für die Hochgeschwindigkeitsübertragung von Daten zwischen SQL Server -Tabellen konzipiert. Wenn Sie eine Formatdatei verwenden, müssen Quell- und Zieltabelle nicht identisch sein. Die Datenübertragung besteht aus zwei Schritten:

  1. Massenexportieren der Daten aus einer Quelltabelle in eine Datendatei

  2. Massenimportieren der Daten aus der Datendatei in die Zieltabelle

Durch die Verwendung des systemeigenen Formats zwischen identischen Tabellen wird die unnötige Konvertierung von Datentypen in das und aus dem Zeichenformat vermieden und somit Zeit und Speicherplatz gespart. Um eine optimale Übertragungsrate zu erreichen, werden jedoch wenige Überprüfungen der Datenformatierung vorgenommen. Berücksichtigen Sie, um Probleme mit den geladenen Daten zu verhindern, die folgende Einschränkungsliste.

Beschränkungen

Um Daten im systemeigenen Format erfolgreich zu importieren, müssen folgende Punkte sichergestellt sein:

  • Die Datendatei liegt im systemeigenen Format vor.

  • Die Zieltabelle muss mit der Datendatei kompatibel sein (Spaltenanzahl, Datentyp, Länge, NULL-Status usw. müssen richtig sein), oder Sie müssen eine Formatdatei verwenden, um jedes Feld den entsprechenden Spalten zuzuordnen.

    Hinweis

    Wenn Sie Daten aus einer Datei importieren, die nicht mit der Zieltabelle übereinstimmt, kann der Importvorgang zwar erfolgreich sein, aber die in die Zieltabelle eingefügten Datenwerte sind wahrscheinlich falsch. Das liegt daran, dass die Daten aus der Datei mithilfe des Formats der Zieltabelle interpretiert werden. Daher hat jede fehlende Übereinstimmung die Einfügung falscher Werte zur Folge. Eine derartige fehlende Übereinstimmung kann jedoch unter keinen Umständen logische oder physische Inkonsistenzen in der Datenbank verursachen.

    Weitere Informationen zur Verwendung von Formatdateien finden Sie unter Formatdateien zum Importieren oder Exportieren von Daten (SQL Server).

Ein erfolgreicher Import beschädigt die Zieltabelle nicht.

Verarbeitung von Daten im nativen Format durch bcp

Dieser Abschnitt enthält spezielle Überlegungen zum Exportieren und Importieren von Daten im systemeigenen Format durch das Hilfsprogramm bcp .

  • Nicht auf Zeichen basierende Daten

    Das Hilfsprogramm „bcp“ verwendet das interne binäre Datenformat von SQL Server , um auf Nichtzeichen basierende Daten aus einer Tabelle in eine Datendatei zu schreiben.

  • Daten vom Typ char oder varchar

    Am Anfang jedes char - oder varchar -Felds fügt bcp die Präfixlänge hinzu.

    Wichtig

    Wenn der einheitliche Modus verwendet wird, konvertiert das Hilfsprogramm „bcp“ standardmäßig Zeichen aus SQL Server in OEM-Zeichen, bevor sie in eine Datendatei kopiert werden. Das Hilfsprogramm „bcp“ konvertiert Zeichen aus einer Datendatei in ANSI-Zeichen, bevor der Massenimport der Zeichen in eine SQL Server -Tabelle ausgeführt wird. Während dieser Konvertierungen kann es zum Verlust von Daten mit erweiterten Zeichen kommen. Verwenden Sie für erweiterte Zeichen entweder das systemeigene Unicode-Format, oder geben Sie eine Codepage an.

  • sql_variant -Datentyp

    Wenn sql_variant -Daten als SQLVARIANT in einer Datendatei im nativen Format gespeichert werden, behalten die Daten alle Merkmale. Die Metadaten, die den Datentyp jedes Datenwerts aufzeichnen, werden zusammen mit dem Datenwert gespeichert. Diese Metadaten werden verwendet, um den Datenwert mit dem gleichen Datentyp in einer sql_variant -Zielspalte neu zu erstellen.

    Wenn der Datentyp der Zielspalte nicht sql_variantist, werden alle Datenwerte unter Einhaltung der üblichen Regeln der impliziten Datenkonvertierung in den Datentyp der Zielspalte konvertiert. Wenn während der Datenkonvertierung ein Fehler auftritt, wird für den aktuellen Batch ein Rollback ausgeführt. Bei Werten vom Typ char und varchar, die zwischen sql_variant-Spalten übertragen werden, treten möglicherweise Probleme bei der Codepagekonvertierung auf.

    Weitere Informationen zur Datenkonvertierung finden Sie unter Datentypkonvertierung (Datenbank-Engine).

Befehlsoptionen für das native Format

Sie können Daten im nativen Format importieren, unter Verwendung von BCP, BULK INSERT oder INSERT ... SELECT * FROM OPENROWSET(BULK...). Für einen bcp -Befehl oder eine BULK INSERT -Anweisung können Sie das Datenformat in der Anweisung angeben. Für eine INSERT ... SELECT * FROM OPENROWSET(BULK...)-Anweisung müssen Sie das Datenformat in einer Formatdatei angeben.

Das native Format wird durch die folgenden Befehlsoptionen unterstützt:

Get-Help Option BESCHREIBUNG
bcp -n Veranlasst das Hilfsprogramm „bcp“, die nativen Datentypen der Daten zu verwenden.*
BULK INSERT DATAFILETYPE ='native' Verwendet die systemeigenen Datentypen (native oder widenative) der Daten. Beachten Sie, dass DATAFILETYPE nicht erforderlich ist, wenn eine Formatdatei die Datentypen angibt.
OPENROWSET Muss eine Formatdatei verwenden

* Verwenden Sie zum Laden nativer Daten (-n) in ein Format, das mit früheren Versionen von SQL Server -Clients kompatibel ist, den Schalter -V. Weitere Informationen finden Sie unter Importieren von Daten aus früheren SQL Server-Versionen im nativen Format oder im Zeichenformat.

Hinweis

Alternativ können Sie die Formatierung pro Feld in einer Formatdatei angeben. Weitere Informationen finden Sie unter Formatdateien zum Importieren oder Exportieren von Daten (SQL Server).

Beispieltestbedingungen

Die in diesem Thema beschriebenen Beispiele basieren auf einer Tabelle und einer Formatdatei, die nachstehend definiert werden.

Beispieltabelle

Das folgende Skript erstellt eine Testdatenbank sowie eine Tabelle namens myNative und füllt die Tabelle mit einigen ursprünglichen Werten auf. Führen Sie den folgenden Transact-SQL-Befehl in Microsoft SQL Server Management Studio (SSMS) aus:

CREATE DATABASE TestDatabase;
GO

USE TestDatabase;
CREATE TABLE dbo.myNative ( 
   PersonID smallint NOT NULL,
   FirstName varchar(25) NOT NULL,
   LastName varchar(30) NOT NULL,
   BirthDate date,
   AnnualSalary money
   );

-- Populate table
INSERT TestDatabase.dbo.myNative
VALUES 
(1, 'Anthony', 'Grosse', '1980-02-23', 65000.00),
(2, 'Alica', 'Fatnowna', '1963-11-14', 45000.00),
(3, 'Stella', 'Rossenhain', '1992-03-02', 120000.00);

-- Review Data
SELECT * FROM TestDatabase.dbo.myNative;

Beispiel einer Nicht-XML-Formatdatei

SQL Server unterstützt zwei Typen von Formatdateien: Nicht-XML- und XML-Format. Nicht-XML ist das ursprüngliche Format, das von früheren Versionen von SQL Server unterstützt wird. Ausführliche Informationen finden Sie unter Nicht-XML-Formatdateien (SQL Server) . Im folgenden Befehl wird das bcp-Hilfsprogramm verwendet, um die Nicht-XML-Formatdatei myNative.fmtzu erstellen, die auf dem Schema von myNativebasiert. Geben Sie bei der Ausführung eines bcp -Befehls zum Erstellen einer Formatdatei das format -Argument an, und verwenden Sie nul anstatt eines Datendateipfads. Die Option „format“ erfordert außerdem die Option -f . Zusätzlich wird in diesem Beispiel der Qualifizierer c verwendet, um Zeichendaten anzugeben, und T , um eine vertrauenswürdige Verbindung anzugeben, für die integrierte Sicherheit verwendet wird. Geben Sie folgende Befehle an der Eingabeaufforderung ein:

bcp TestDatabase.dbo.myNative format nul -f D:\BCP\myNative.fmt -T 

REM Review file
Notepad D:\BCP\myNative.fmt

Wichtig

Stellen Sie sicher, dass Ihre Nicht-XML-Formatdatei mit einem Wagenrücklauf/Zeilenvorschub endet. Andernfalls wird Ihnen möglicherweise die folgende Fehlermeldung angezeigt:

SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file

Beispiele

In dem folgenden Beispiel werden die Datenbank und die Formatdateien verwendet, die oben erstellt wurden.

Verwenden von bcp und des nativen Formats zum Exportieren von Daten

Der Schalter -n und der OUT -Befehl. Hinweis: Die in diesem Beispiel erstellte Datendatei wird auch in allen nachfolgenden Beispielen verwendet. Geben Sie folgende Befehle an der Eingabeaufforderung ein:

bcp TestDatabase.dbo.myNative OUT D:\BCP\myNative.bcp -T -n

REM Review results
NOTEPAD D:\BCP\myNative.bcp

Verwenden von bcp und des nativen Formats zum Importieren von Daten ohne eine Formatdatei

Der Schalter -n und der IN -Befehl. Geben Sie folgende Befehle an der Eingabeaufforderung ein:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myNative;"

REM Import data
bcp TestDatabase.dbo.myNative IN D:\BCP\myNative.bcp -T -n

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myNative;"

Verwenden von bcp und des nativen Formats zum Importieren von Daten mit einer Nicht-XML-Formatdatei

Die Schalter -n und -f switches und IN commund. Geben Sie folgende Befehle an der Eingabeaufforderung ein:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myNative;"

REM Import data
bcp TestDatabase.dbo.myNative IN D:\BCP\myNative.bcp -f D:\BCP\myNative.fmt -T

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myNative;"

Verwenden von BULK INSERT und des nativen Formats ohne eine Formatdatei

DATAFILETYPE -Argument. Führen Sie den folgenden Transact-SQL-Befehl in Microsoft SQL Server Management Studio (SSMS) aus:

TRUNCATE TABLE TestDatabase.dbo.myNative; -- for testing
BULK INSERT TestDatabase.dbo.myNative
	FROM 'D:\BCP\myNative.bcp'
	WITH (
		DATAFILETYPE = 'native'
		);

-- review results
SELECT * FROM TestDatabase.dbo.myNative;

Verwenden von BULK INSERT und des nativen Formats mit einer Nicht-XML-Formatdatei

ArgumentFORMATFILE . Führen Sie den folgenden Transact-SQL-Befehl in Microsoft SQL Server Management Studio (SSMS) aus:

TRUNCATE TABLE TestDatabase.dbo.myNative; -- for testing
BULK INSERT TestDatabase.dbo.myNative
   FROM 'D:\BCP\myNative.bcp'
   WITH (
		FORMATFILE = 'D:\BCP\myNative.fmt'
		);

-- review results
SELECT * FROM TestDatabase.dbo.myNative;

Verwenden von OPENROWSET und des nativen Formats mit einer Nicht-XML-Formatdatei

ArgumentFORMATFILE . Führen Sie den folgenden Transact-SQL-Befehl in Microsoft SQL Server Management Studio (SSMS) aus:

TRUNCATE TABLE TestDatabase.dbo.myNative;  -- for testing
INSERT INTO TestDatabase.dbo.myNative
	SELECT *
	FROM OPENROWSET (
		BULK 'D:\BCP\myNative.bcp', 
		FORMATFILE = 'D:\BCP\myNative.fmt'  
		) AS t1;

-- review results
SELECT * FROM TestDatabase.dbo.myNative;

So verwenden Sie Datenformate für Massenimport oder Massenexport

Weitere Informationen

bcp (Hilfsprogramm)
BULK INSERT (Transact-SQL)
Datentypen (Transact-SQL)
sql_variant (Transact-SQL)
Importieren von Daten aus früheren SQL Server-Versionen im nativen Format oder im Zeichenformat
OPENROWSET (Transact-SQL)
Verwenden des systemeigenen Unicode-Formats zum Importieren oder Exportieren von Daten (SQL Server)