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

Gilt für: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsPlatform System (PDW)

Das Zeichenformat wird für den Massenexport von Daten in eine Textdatei empfohlen, die in einem anderen Programm verwendet werden sollen, oder für den Massenimport von Daten aus einer Textdatei, die von einem anderen Programm generiert werden.

Das Zeichenformat verwendet das Zeichendatenformat für alle Spalten. Es ist nützlich, Informationen im Zeichenformat zu speichern, wenn Sie die Daten mit einem anderen Programm, z. B. als Kalkulationstabelle, verwenden, oder die Daten aus einer Datenbank eines anderen Herstellers wie z. B. Oracle in eine Instanz von SQL Server kopiert werden müssen.

Hinweis

Wenn Sie Daten zwischen Instanzen von Microsoft SQL Server massenübertragen und die Datendatei Unicode-Zeichendaten, aber keine Sonderzeichen oder DBCS-Zeichen enthält, sollten Sie das Unicode-Zeichenformat verwenden. Weitere Informationen finden Sie unter Verwenden des Unicode-Zeichenformats zum Importieren und Exportieren von Daten (SQL Server).

In diesem Thema:
Überlegungen zum Verwenden des Zeichenformats
Befehlsoptionen für das Zeichenformat
Beispieltestbedingungen
 ● Beispieltabelle
 ● Beispiel einer Nicht-XML-Formatdatei
Beispiele
 ● Verwenden von bcp und dem Zeichenformat zum Exportieren von Daten
 ● Verwenden von bcp und dem Zeichenformat zum Importieren von Daten ohne eine Formatdatei
 ● Verwenden von bcp und dem Zeichenformat zum Importieren von Daten mit einer Nicht-XML-Formatdatei
 ● Verwenden von BULK INSERT und dem Zeichenformat ohne eine Formatdatei
 ● Verwenden von BULK INSERT und dem Zeichenformat mit einer Nicht-XML-Formatdatei
 ● Verwenden von OPENROWSET und dem Zeichenformat mit einer Nicht-XML-Formatdatei
Verwandte Aufgaben

Überlegungen zum Verwenden des Zeichenformats

Beim Verwenden des Zeichenformats sollten Sie Folgendes berücksichtigen:

  • Das Hilfsprogramm „bcp“ trennt standardmäßig die Zeichendatenfelder mit dem Tabstoppzeichen und schließt die Datensätze mit einem Neue-Zeile-Zeichen ab. Weitere Informationen zum Angeben alternativer Abschlusszeichen finden Sie unter Angeben von Feld- und Zeilenabschlusszeichen (SQL Server).

  • Standardmäßig werden vor einem Massenexport oder -import von Daten im Zeichenmodus die folgenden Konvertierungen ausgeführt:

    Richtung des Massenvorgangs Konvertierung
    Exportieren Konvertiert Daten in die Zeichendarstellung. Wenn dies explizit angefordert wird, werden die Daten in die angeforderte Codepage für Zeichenspalten konvertiert. Wenn keine Codepage angegeben wird, werden die Zeichendaten mithilfe der OEM-Codepage des Clientcomputers konvertiert.
    Importieren Konvertiert Zeichendaten bei Bedarf in die systemeigene Darstellung und übersetzt die Zeichendaten von der Codepage des Clients in die Codepage der Zielspalte(n).
  • Um den Verlust von Sonderzeichen zu verhindern, verwenden Sie das Unicode-Zeichenformat, oder geben Sie eine Codepage an.

  • Alle sql_variant -Daten, die in einer Zeichenformatdatei gespeichert sind, werden ohne Metadaten gespeichert. Alle Datenwerte werden gemäß den Regeln der impliziten Datenkonvertierung in das char -Format konvertiert. Beim Importieren in eine sql_variant -Spalte werden die Daten als char-Datentyp importiert. Beim Importieren in eine Spalte mit einem anderen Datentyp als sql_variantwerden die Daten mithilfe der impliziten Konvertierung von char konvertiert. Weitere Informationen zur Datenkonvertierung finden Sie unter Datentypkonvertierung (Datenbank-Engine).

  • Das Hilfsprogramm „bcp“ exportiert money -Werte in Datendateien im Zeichenformat mit vier Stellen nach dem Dezimaltrennzeichen und ohne Symbole für die Zifferngruppierung, wie z.B. Kommas. So wird z.B. eine money -Spalte mit dem Wert 1,234,567.123456 beim Massenkopieren in eine Datendatei als die Zeichenfolge 1234567.1235 massenexportiert.

Befehlsoptionen für das Zeichenformat

Sie können Daten im Zeichenformat in eine Tabelle importieren, indem Sie die folgenden Anweisungen verwenden: 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 Zeichenformat wird von den folgenden Befehlsoptionen unterstützt:

Get-Help Option BESCHREIBUNG
bcp -c Bewirkt, dass das Hilfsprogramm „bcp“ Zeichendaten verwendet.*
BULK INSERT DATAFILETYPE ='char' Verwendet das Zeichenformat beim Massenimport von Daten.
OPENROWSET Muss eine Formatdatei verwenden

*Um Zeichendaten (-c) in ein Format zu laden, das mit früheren Versionen von SQL Server -Clients kompatibel ist, verwenden Sie 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 myChar 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.myChar ( 
   PersonID smallint NOT NULL,
   FirstName varchar(25) NOT NULL,
   LastName varchar(30) NOT NULL,
   BirthDate date,
   AnnualSalary money
   );

-- Populate table
INSERT TestDatabase.dbo.myChar
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.myChar;

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 myChar.fmtzu erstellen, die auf dem Schema von myCharbasiert. 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 folgenden Befehl an der Eingabeaufforderung ein:

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

REM Review file
Notepad D:\BCP\myChar.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 dem Zeichenformat zum Exportieren von Daten

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

bcp TestDatabase.dbo.myChar OUT D:\BCP\myChar.bcp -T -c

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

Verwenden von bcp und dem Zeichenformat zum Importieren von Daten ohne eine Formatdatei

Der Schalter -c und der IN -Befehl. Geben Sie folgenden Befehl an der Eingabeaufforderung ein:

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

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -T -c

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

Verwenden von bcp und dem Zeichenformat zum Importieren von Daten mit einer Nicht-XML-Formatdatei

Die Schalter -c und -f switches und IN commund. Geben Sie folgenden Befehl an der Eingabeaufforderung ein:

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

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

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

Verwenden von BULK INSERT und dem Zeichenformat 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.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
	FROM 'D:\BCP\myChar.bcp'
	WITH (
		DATAFILETYPE = 'Char'
		);

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

Verwenden von BULK INSERT und dem Zeichenformat 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.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
   FROM 'D:\BCP\myChar.bcp'
   WITH (
		FORMATFILE = 'D:\BCP\myChar.fmt'
		);

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

Verwenden von OPENROWSET und dem Zeichenformat 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.myChar;  -- for testing
INSERT INTO TestDatabase.dbo.myChar
	SELECT *
	FROM OPENROWSET (
		BULK 'D:\BCP\myChar.bcp', 
		FORMATFILE = 'D:\BCP\myChar.fmt'  
		) AS t1;

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

So verwenden Sie Datenformate für Massenimport oder Massenexport

Weitere Informationen

bcp (Hilfsprogramm)
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Datentypen (Transact-SQL)
Importieren von Daten aus früheren SQL Server-Versionen im nativen Format oder im Zeichenformat