Verwenden des Unicode-Zeichenformats zum Importieren und Exportieren von Daten (SQL Server)Use Unicode Character Format to Import or Export Data (SQL Server)

Es wird empfohlen, für die Massenübertragung von Daten zwischen mehreren Instanzen von SQL ServerSQL Server mithilfe einer Datendatei, die Sonderzeichen oder Zeichen aus dem Doppelbyte-Zeichensatz (Double-Byte Character Set, DBCS) enthält, das Unicode-Zeichenformat zu verwenden.Unicode character format is recommended for bulk transfer of data between multiple instances of SQL ServerSQL Server by using a data file that contains extended/DBCS characters. Mit dem Unicode-Zeichenformat können Daten von einem Server mithilfe einer Codepage exportiert werden, wenn sich diese Codepage von der Codepage unterscheidet, die der Client verwendet, der den Vorgang ausführt.The Unicode character data format allows data to be exported from a server by using a code page that differs from the code page used by the client that is performing the operation. In solchen Fällen bietet die Verwendung des Unicode-Zeichenformats folgende Vorteile:In such cases, use of Unicode character format has the following advantages:

  • Wenn es sich bei den Quell- und Zieldaten um Unicode-Datentypen handelt, bleiben bei Verwendung des Unicode-Zeichenformats alle Zeichendaten erhalten.If the source and destination data are Unicode data types, use of Unicode character format preserves all of the character data.

  • Wenn es sich bei den Quell- und Zieldaten nicht um Unicode-Datentypen handelt, wird durch die Verwendung des Unicode-Datenformats der Verlust von Sonderzeichen in Bezug auf die Quelldaten minimiert, die am Ziel nicht dargestellt werden können.If the source and destination data are not Unicode data types, use of Unicode character format minimizes the loss of extended characters in the source data that cannot be represented at the destination.

In diesem Thema:In this Topic:
Überlegungen zur Verwendung des Unicode-ZeichenformatsConsiderations for Using Unicode Character Format
Besondere Überlegungen zur Verwendung des Unicode-Zeichenformats, bcp und einer FormatdateiSpecial Considerations for Using Unicode Character Format, bcp, and a Format File
Befehlsoptionen für das Unicode-ZeichenformatCommand Options for Unicode Character Format
BeispieltestbedingungenExample Test Conditions
 ● Beispieltabelle ● Sample Table
 ● Beispiel einer Nicht-XML-Formatdatei ● Sample Non-XML Format File
BeispieleExamples
 ● Verwenden von bcp und dem Unicode-Zeichenformat zum Exportieren von Daten ● Using bcp and Unicode Character Format to Export Data
 ● Verwenden von bcp und dem Unicode-Zeichenformat zum Importieren von Daten ohne eine Formatdatei ● Using bcp and Unicode Character Format to Import Data without a Format File
 ● Verwenden von bcp und dem Unicode-Zeichenformat zum Importieren von Daten mit einer Nicht-XML-Formatdatei ● Using bcp and Unicode Character Format to Import Data with a Non-XML Format File
 ● Verwenden von BULK INSERT und dem Unicode-Zeichenformat ohne eine Formatdatei ● Using BULK INSERT and Unicode Character Format without a Format File
 ● Verwenden von BULK INSERT und dem Unicode-Zeichenformat mit einer Nicht-XML-Formatdatei ● Using BULK INSERT and Unicode Character Format with a Non-XML Format File
 ● Verwenden von OPENROWSET und dem Unicode-Zeichenformat mit einer Nicht-XML-Formatdatei ● Using OPENROWSET and Unicode Character Format with a Non-XML Format File
Verwandte AufgabenRelated Tasks

Überlegungen zur Verwendung des Unicode-ZeichenformatsConsiderations for Using Unicode Character Format

Beim Verwenden des Unicode-Zeichenformats sollten Sie Folgendes berücksichtigen:When using Unicode character format, consider the following:

Besondere Überlegungen zur Verwendung des Unicode-Zeichenformats, bcp und einer FormatdateiSpecial Considerations for Using Unicode Character Format, bcp, and a Format File

Datendateien im Unicode-Zeichenformat folgen den Konventionen für Unicode-Dateien.Unicode character format data files follow the conventions for Unicode files. Die ersten zwei Bytes der Datei sind Hexadezimalzahlen (0xFFFE).The first two bytes of the file are hexadecimal numbers, 0xFFFE. Diese Bytes dienen als Markierungen für die Bytereihenfolge (byte-order marks; BOM), in der angegeben wird, ob das höherwertige Byte in der Datei zuerst oder zuletzt gespeichert wird.These bytes serve as byte-order marks (BOM), specifying whether the high-order byte is stored first or last in the file. Das Hilfsprogramm „bcp“ kann die BOM falsch interpretieren, was dazu führt, dass der Importvorgang teilweise fehlschlägt. Sie erhalten dann möglicherweise eine ähnliche Fehlermeldung wie die folgende:The bcp Utility may misinterpret the BOM and cause part of your import process to fail; you may receive an error message similar as follows:

Starting copy...
SQLState = 22005, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid character value for cast specification

Die BOM kann unter den folgenden Umständen falsch interpretiert werden:The BOM may be misinterpreted under the following conditions:

  • Um Unicode-Zeichen anzugeben, werden das Hilfsprogramm „bcp“ und der Schalter -w verwendet.The bcp Utility is used and the -w switch is used to indicate Unicode character

  • Es wird eine Formatdatei verwendet.A format file is used

  • Das erste Feld in der Datendatei enthält ein Nichtzeichen.The first field in the data file is non-character

Ziehen Sie in Erwägung, ob eine der folgenden Problemumgehungen für Ihre besondere Situation möglicherweise in Betracht kommt:Consider whether any of the following workarounds may be available for your specific situation:

Befehlsoptionen für das Unicode-ZeichenformatCommand Options for Unicode Character Format

Sie können Daten im Unicode-Zeichenformat in eine Tabelle importieren, indem Sie 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.You can import Unicode character format data into a table using bcp, BULK INSERT or INSERT ... SELECT * FROM OPENROWSET(BULK...). For a bcp command or BULK INSERT statement, you can specify the data format in the statement. Für eine INSERT ... SELECT * FROM OPENROWSET(BULK...)-Anweisung müssen Sie das Datenformat in einer Formatdatei angeben.For an INSERT ... SELECT * FROM OPENROWSET(BULK...) statement, you must specify the data format in a format file.

Das Unicode-Zeichenformat wird von den folgenden Befehlsoptionen unterstützt:Unicode character format is supported by the following command options:

BefehlCommand OptionOption BeschreibungDescription
bcpbcp -w-w Verwendet das Unicode-ZeichenformatUses the Unicode character format.
BULK INSERTBULK INSERT DATAFILETYPE ='widechar'DATAFILETYPE ='widechar' Verwendet das Unicode-Zeichenformat beim Massenimport von DatenUses Unicode character format when bulk importing data.
OPENROWSETOPENROWSET N/A Muss eine Formatdatei verwendenMust use a format file

Hinweis

Alternativ können Sie die Formatierung pro Feld in einer Formatdatei angeben.Alternatively, you can specify formatting on a per-field basis in a format file. Weitere Informationen finden Sie unter Formatdateien zum Importieren oder Exportieren von Daten (SQL Server).For more information, see Format Files for Importing or Exporting Data (SQL Server).

BeispieltestbedingungenExample Test Conditions

Die in diesem Thema beschriebenen Beispiele basieren auf einer Tabelle und einer Formatdatei, die nachstehend definiert werden.The examples in this topic are based on the table, and format file defined below.

BeispieltabelleSample Table

Das folgende Skript erstellt eine Testdatenbank sowie eine Tabelle namens myWidechar und füllt die Tabelle mit einigen ursprünglichen Werten auf.The script below creates a test database, a table named myWidechar and populates the table with some initial values. Führen Sie den folgenden Transact-SQL-Befehl in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS) aus:Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):

CREATE DATABASE TestDatabase;
GO

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

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

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

Beispiel einer Nicht-XML-FormatdateiSample Non-XML Format File

SQL Server unterstützt zwei Typen von Formatdateien: Nicht-XML- und XML-Format.SQL Server support two types of format file: non-XML format and XML format. Nicht-XML ist das ursprüngliche Format, das von früheren Versionen von SQL Server unterstützt wird.The non-XML format is the original format that is supported by earlier versions of SQL Server. Ausführliche Informationen finden Sie unter Nicht-XML-Formatdateien (SQL Server) .Please review Non-XML Format Files (SQL Server) for detailed information. Im folgenden Befehl wird das bcp-Hilfsprogramm verwendet, um die Nicht-XML-Formatdatei myWidechar.fmtzu erstellen, die auf dem Schema von myWidecharbasiert.The following command will use the bcp utility to generate a non-xml format file, myWidechar.fmt, based on the schema of myWidechar. Geben Sie bei der Ausführung eines bcp -Befehls zum Erstellen einer Formatdatei das format -Argument an, und verwenden Sie nul anstatt eines Datendateipfads.To use a bcp command to create a format file, specify the format argument and use nul instead of a data-file path. Die Option „format“ erfordert außerdem die Option -f .The format option also requires the -f option. 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.In addition, for this example, the qualifier c is used to specify character data, and T is used to specify a trusted connection using integrated security. Geben Sie folgende Befehle an der Eingabeaufforderung ein:At a command prompt, enter the following commands:

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

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

Wichtig

Stellen Sie sicher, dass Ihre Nicht-XML-Formatdatei mit einem Wagenrücklauf/Zeilenvorschub endet.Ensure your non-XML format file ends with a carriage return\line feed. Andernfalls wird Ihnen möglicherweise die folgende Fehlermeldung angezeigt:Otherwise you will likely receive the following error message:

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

BeispieleExamples

In dem folgenden Beispiel werden die Datenbank und die Formatdateien verwendet, die oben erstellt wurden.The examples below use the database, and format files created above.

Verwenden von bcp und dem Unicode-Zeichenformat zum Exportieren von DatenUsing bcp and Unicode Character Format to Export Data

Der Schalter-w und der OUT -Befehl.-w switch and OUT command. Hinweis: Die in diesem Beispiel erstellte Datendatei wird auch in allen nachfolgenden Beispielen verwendet.Note: the data file created in this example will be used in all subsequent examples. Geben Sie folgende Befehle an der Eingabeaufforderung ein:At a command prompt, enter the following commands:

bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w

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

Verwenden von bcp und dem Unicode-Zeichenformat zum Importieren von Daten ohne eine FormatdateiUsing bcp and Unicode Character Format to Import Data without a Format File

Der Schalter-w und der IN -Befehl.-w switch and IN command. Geben Sie folgende Befehle an der Eingabeaufforderung ein:At a command prompt, enter the following commands:

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

REM Import data
bcp TestDatabase.dbo.myWidechar IN D:\BCP\myWidechar.bcp -T -w

REM Review results is SSMS

Verwenden von bcp und dem Unicode-Zeichenformat zum Importieren von Daten mit einer Nicht-XML-FormatdateiUsing bcp and Unicode Character Format to Import Data with a Non-XML Format File

Die Schalter-w und -f switches und IN commund.-w and -f switches and IN command. Da in diesem Beispiel bcp, eine Formatdatei und Unicode-Zeichen verwendet werden und das erste Datenfeld in der Datendatei ein Nichtzeichen enthält, muss eine Problemumgehung angewendet werden.A workaround will need to be used since this example involves bcp, a format file, Unicode character, and the first data field in the data file is non-character. Weitere Informationen finden Sie weiter oben in diesem Artikel unter Besondere Überlegungen zur Verwendung des Unicode-Zeichenformats, bcp und einer Formatdatei.See Special Considerations for Using Unicode Character Format, bcp, and a Format File, above. Die Datendatei myWidechar.bcp wird durch Hinzufügen eines zusätzlichen Datensatzes als „Dummy“-Datensatz geändert, der dann mit dem Schalter -F 2 ausgelassen wird.The data file myWidechar.bcp will be altered by adding an additional record as a “dummy” record which will then be skipped with the -F 2 switch.

Geben Sie an der Befehlszeile die folgenden Befehle ein, und führen Sie die folgenden Änderungsschritte aus:At a command prompt, enter the following commands and follow the modification steps:

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

REM Open data file
Notepad D:\BCP\myWidechar.bcp
REM Copy first record and then paste as new first record.  This additional record is the "dummy" record.
REM Close file.

REM Import data instructing bcp to skip dummy record with the -F 2 switch.
bcp TestDatabase.dbo.myWidechar IN D:\BCP\myWidechar.bcp -f D:\BCP\myWidechar.fmt -T -F 2

REM Review results is SSMS

REM Return data file to original state for usage in other examples
bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w

Verwenden von BULK INSERT und dem Unicode-Zeichenformat ohne eine FormatdateiUsing BULK INSERT and Unicode Character Format without a Format File

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

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

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

Verwenden von BULK INSERT und dem Unicode-Zeichenformat mit einer Nicht-XML-FormatdateiUsing BULK INSERT and Unicode Character Format with a Non-XML Format File

ArgumentFORMATFILE .FORMATFILE argument. Führen Sie den folgenden Transact-SQL-Befehl in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS) aus:Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):

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

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

Verwenden von OPENROWSET und dem Unicode-Zeichenformat mit einer Nicht-XML-FormatdateiUsing OPENROWSET and Unicode Character Format with a Non-XML Format File

ArgumentFORMATFILE .FORMATFILE argument. Führen Sie den folgenden Transact-SQL-Befehl in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS) aus:Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):

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

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

Verwandte AufgabenRelated Tasks

So verwenden Sie Datenformate für Massenimport oder MassenexportTo use data formats for bulk import or bulk export

Siehe auchSee Also

bcp Utility bcp Utility
BULK INSERT (Transact-SQL) BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
Datentypen (Transact-SQL) Data Types (Transact-SQL)
Sortierung und Unicode-UnterstützungCollation and Unicode Support