Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Es wird empfohlen, für die Massenübertragung von Daten zwischen mehreren Instanzen von SQL Server mithilfe einer Datendatei, die Sonderzeichen oder Zeichen aus dem Doppelbyte-Zeichensatz (Double-Byte Character Set, DBCS) enthält, das Unicode-Zeichenformat zu verwenden. Mit dem Unicode-Zeichendatenformat können Daten von einem Server exportiert werden, indem eine Codeseite verwendet wird, die sich von der Codeseite unterscheidet, die vom Client verwendet wird, der den Vorgang ausführt. In solchen Fällen bietet die Verwendung des Unicode-Zeichenformats folgende Vorteile:
Wenn es sich bei den Quell- und Zieldaten um Unicode-Datentypen handelt, bleiben bei Verwendung des Unicode-Zeichenformats alle Zeichendaten erhalten.
Wenn die Quell- und Zieldaten keine Unicode-Datentypen sind, minimiert die Verwendung des Unicode-Zeichenformats den Verlust erweiterter Zeichen in den Quelldaten, die nicht am Ziel dargestellt werden können.
Überlegungen zur Verwendung des Unicode-Zeichenformats
Berücksichtigen Sie bei der Verwendung des Unicode-Zeichenformats Folgendes:
Das Hilfsprogramm „bcp“ trennt standardmäßig die Zeichendatenfelder mit dem Tabstoppzeichen und schließt die Datensätze mit einem Neue-Zeile-Zeichen ab. Informationen darüber, wie Sie alternative Endzeichen angeben, finden Sie unter Angeben von Feld- und Zeilenendzeichen (SQL Server).
Die sql_variant -Daten, die in einer Datendatei im Unicode-Zeichenformat gespeichert sind, verhalten sich wie Daten in einer Datendatei im Zeichenformat, außer dass die Daten als nchar -Daten und nicht als char -Daten gespeichert sind. Weitere Informationen zum Zeichenformat finden Sie unter Sortierung und Unicode-Unterstützung.
Besondere Überlegungen zur Verwendung des Unicode-Zeichenformats, bcp und einer Formatdatei
Datendateien im Unicode-Zeichenformat folgen den Konventionen für Unicode-Dateien. Die ersten zwei Bytes der Datei sind Hexadezimalzahlen (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. Das bcp Utility interpretiert die BOM möglicherweise falsch und führt dazu, dass ein Teil des Importvorgangs fehlschlägt. Möglicherweise wird eine Fehlermeldung wie folgt angezeigt:
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 Bedingungen falsch interpretiert werden:
Das bcp Utility wird verwendet, und der
-wSchalter wird verwendet, um Unicode-Zeichen anzugeben.Es wird eine Formatdatei verwendet.
Das erste Feld in der Datendatei enthält ein Nichtzeichen.
Überlegen Sie, ob eine der folgenden Problemumgehungen für Ihre spezifische Situation verfügbar sein könnte:
Verwenden Sie keine Formatdatei. Ein Beispiel für diese Problemumgehung wird in Verwendung von bcp und Unicode-Zeichenformat zum Importieren von Daten ohne Formatdatei bereitgestellt.
Verwenden Sie den
-cSchalter anstelle von-w,Exportieren Sie die Daten mit einem nativen Format erneut.
Verwenden Sie BULK INSERT (Transact-SQL) oder OPENROWSET (Transact-SQL). Beispiele für diese Problemumgehungen werden in den Abschnitten Verwendung von BULK INSERT und Unicode-Zeichenformat mit einer Nicht-XML-Formatdatei und Verwendung von OPENROWSET und Unicode-Zeichenformat mit einer Nicht-XML-Formatdatei bereitgestellt.
Fügen Sie den ersten Datensatz manuell in die Zieltabelle ein, und verwenden Sie
-F 2dann den Schalter, um den Import für den zweiten Datensatz zu starten.Fügen Sie manuell einen Dummy-Datensatz als ersten Datensatz in die Datendatei ein und verwenden Sie dann die Option
-F 2, um den Import beim zweiten Datensatz zu starten. Ein Beispiel für diese Vorgehensweise wird im Abschnitt Verwenden des bcp und Unicode-Zeichenformats zum Importieren von Daten mit einem Nicht-XML-Dateiformat bereitgestellt.Verwenden Sie eine Stagingtabelle, in der die erste Spalte einen Zeichendatentyp enthält.
Exportieren Sie die Daten erneut, und ändern Sie die Datenfeldreihenfolge so, dass das erste Datenfeld Zeichen ist. Verwenden Sie anschließend eine Formatdatei, um das Datenfeld der tatsächliche Reihenfolge in der Tabelle neu zuzuordnen. Ein Beispiel finden Sie unter Verwenden einer Formatdatei zum Zuordnen von Tabellenspalten zu Datendateifeldern (SQL Server).
Befehlsoptionen für unicode-Zeichenformat
Sie können Unicode-Zeichenformatdaten mithilfe von bcp, BULK INSERT oder OPENROWSET in eine Tabelle importieren. Für einen bcp-Befehl oder eine BULK INSERT-Anweisung können Sie das Datenformat in der Anweisung angeben. Für eine OPENROWSET-Anweisung müssen Sie das Datenformat in einer Formatdatei angeben.
Das Unicode-Zeichenformat wird von den folgenden Befehlsoptionen unterstützt:
| Get-Help | Auswahlmöglichkeit | Beschreibung |
|---|---|---|
bcp |
-w |
Verwendet das Unicode-Zeichenformat |
BULK INSERT |
DATAFILETYPE ='widechar' |
Verwendet das Unicode-Zeichenformat beim Massenimport von Daten |
OPENROWSET |
N/V | Muss eine Formatdatei verwenden |
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 Beispiele in diesem Artikel basieren auf der folgenden Tabelle und Formatdatei.
Beispieltabelle
Das folgende Skript erstellt eine Testdatenbank, eine Tabelle mit dem Namen myWidechar und füllt die Tabelle mit einigen Anfangswerten auf. Führen Sie die folgenden Transact-SQL-Anweisungen in Microsoft SQL Server Management Studio (SSMS) aus:
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;
Beispieldatei im Nicht-XML-Format
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. Weitere Informationen finden Sie unter Verwenden von Nicht-XML-Formatdateien (SQL Server).
Der folgende Befehl verwendet das bcp-Hilfsprogramm, um eine Datei im Nicht-XML-Format myWidechar.fmt basierend auf dem Schema von myWidechar zu generieren. Wenn Sie einen bcp-Befehl zum Erstellen einer Formatdatei verwenden möchten, geben Sie das format Argument an, und verwenden Sie nul das Argument anstelle eines Datendateipfads. Die Formatoption erfordert auch die -f Option. Darüber hinaus wird für dieses Beispiel der Qualifizierer c zum Angeben von Zeichendaten verwendet und T verwendet, um eine vertrauenswürdige Verbindung mit integrierter Sicherheit anzugeben. Geben Sie folgende Befehle an der Eingabeaufforderung ein:
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. Andernfalls wird 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
Die folgenden Beispiele verwenden die Datenbank und formatieren zuvor erstellte Dateien.
Verwenden des bcp- und Unicode-Zeichenformats zum Exportieren von Daten
-w schalter und OUT befehl. Die in diesem Beispiel erstellte Datendatei wird in allen nachfolgenden Beispielen verwendet. Geben Sie folgende Befehle an der Eingabeaufforderung ein:
bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w
REM Review results
NOTEPAD D:\BCP\myWidechar.bcp
Verwenden des bcp- und Unicode-Zeichenformats zum Importieren von Daten ohne Formatdatei
-w schalter und IN befehl. Geben Sie folgende Befehle an der Eingabeaufforderung ein:
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 des bcp- und Unicode-Zeichenformats zum Importieren von Daten mit einer Nicht-XML-Formatdatei
-w- und -f-Schalter und IN-Befehl. Ein Workaround muss angewendet werden, da dieses Beispiel bcp, eine Formatdatei, ein Unicode-Zeichen und ein nicht zeichenbasiertes erstes Datenfeld in der Datendatei umfasst.
Weitere Informationen zur Verwendung des Unicode-Zeichenformats, bcp und einer Formatdatei weiter oben im Artikel. Die Datendatei myWidechar.bcp wird geändert, indem ein zusätzlicher Datensatz als "Dummy"-Datensatz hinzugefügt wird, der dann mit dem -F 2 Schalter übersprungen wird.
Geben Sie an der Befehlszeile die folgenden Befehle ein, und führen Sie die folgenden Änderungsschritte aus:
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 des BULK INSERT- und Unicode-Zeichenformats ohne Formatdatei
DATAFILETYPE Argument. Führen Sie die folgenden Transact-SQL-Anweisungen in Microsoft SQL Server Management Studio (SSMS) aus:
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 des BULK INSERT- und Unicode-Zeichenformats mit einer Nicht-XML-Formatdatei
FORMATFILE Argument. Führen Sie die folgenden Transact-SQL-Anweisungen in Microsoft SQL Server Management Studio (SSMS) aus:
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 des OPENROWSET- und Unicode-Zeichenformats mit einer Nicht-XML-Formatdatei
FORMATFILE Argument. Führen Sie die folgenden Transact-SQL-Anweisungen in Microsoft SQL Server Management Studio (SSMS) aus:
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 Aufgaben
So verwenden Sie Datenformate für Massenimport oder Massenexport
- Importieren von systemeigenen und Zeichenformatdaten aus früheren Versionen von SQL Server
- Verwenden des Zeichenformats zum Importieren oder Exportieren von Daten (SQL Server)
- Verwenden des nativen Formats zum Importieren oder Exportieren von Daten (SQL Server)
- Verwenden des systemeigenen Unicode-Formats zum Importieren oder Exportieren von Daten (SQL Server)