Verwenden des systemeigenen Unicode-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 Unicode-Format ist hilfreich, wenn Informationen von einer Installation von Microsoft SQL Server in eine andere kopiert werden müssen. Durch die Verwendung des systemeigenen Formats bei nicht auf Zeichen basierenden Daten kann Zeit eingespart werden, da die unnötige Konvertierung der Datentypen in und aus dem Zeichenformat entfällt. Die Verwendung des Unicode-Zeichenformats für alle Zeichendaten verhindert, dass es zum Verlust von erweiterten Zeichen beim Massenübertragen von Daten zwischen Servern mit unterschiedlichen Codepages kommt. Eine Datendatei im systemeigenen Unicode-Format kann von jeder Massenimportmethode gelesen werden.

Das systemeigene Unicode-Format wird für die Massenübertragung von Daten zwischen mehreren Instanzen von SQL Server mithilfe einer Datendatei, die Sonderzeichen oder DBCS-Zeichen enthält, empfohlen. Für nicht auf Zeichen basierende Daten verwendet das systemeigene Unicode-Format systemeigene (Datenbank-)Datentypen. Bei Zeichendaten wie char, nchar, varchar, nvarchar, text, varchar(max), nvarchar(max)und ntextverwendet das native Unicode-Format das Unicode-Zeichendatenformat.

Die sql_variant -Daten, die in einer Datendatei im nativen Unicode-Format als SQLVARIANT gespeichert werden, funktionieren auf die gleiche Weise wie in einer Datendatei im nativen Format, mit der Ausnahme, dass Werte der Typen char und varchar in nchar und nvarcharkonvertiert werden. Hierdurch verdoppelt sich der für die entsprechenden Spalten benötigte Speicherplatz. Die ursprünglichen Metadaten bleiben erhalten, und die Werte werden zurück in die ursprünglichen Datentypen char und varchar konvertiert, wenn sie in eine Tabellenspalte massenimportiert werden.

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

Befehlsoptionen für das systemeigene Unicode-Format

Sie können Daten im nativen Unicodeformat in eine Tabelle importieren, indem Sie folgende 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 native Unicode-Format wird durch die folgenden Befehlsoptionen unterstützt:

Get-Help Option BESCHREIBUNG
bcp -N Bewirkt, dass das Hilfsprogramm bcp das native Unicode-Format verwendet, welches das native (Datenbank-)Datentypen für alle nicht auf Zeichen basierenden Daten und das Unicode-Zeichendatenformat für alle Zeichendaten (char, nchar, varchar, nvarchar, textund ntext) verwendet.
BULK INSERT DATAFILETYPE ='widenative' Verwendet das native Unicode-Format beim Massenimportieren von Daten
OPENROWSET 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 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 myWidenative 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.myWidenative ( 
	PersonID smallint NOT NULL,
	FirstName nvarchar(25) NOT NULL,
	LastName nvarchar(30) NOT NULL,
	BirthDate date,
	AnnualSalary money
);

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

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 myWidenative.fmtzu erstellen, die auf dem Schema von myWidenativebasiert. 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.myWidenative format nul -f D:\BCP\myWidenative.fmt -T -N

REM Review file
Notepad D:\BCP\myWidenative.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 Unicode-Zeichenformats 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.myWidenative OUT D:\BCP\myWidenative.bcp -T -N

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

Verwenden von bcp und des nativen Unicode-Zeichenformats 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.myWidenative;"

REM Import data
bcp TestDatabase.dbo.myWidenative IN D:\BCP\myWidenative.bcp -T -N

REM Review results is SSMS

Verwenden von bcp und des nativen Unicode-Zeichenformats 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.myWidenative;"

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

REM Review results is SSMS

Verwenden von BULK INSERT und des nativen Unicode-Zeichenformats 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.myWidenative; -- for testing
BULK INSERT TestDatabase.dbo.myWidenative
	FROM 'D:\BCP\myWidenative.bcp'
	WITH (
		DATAFILETYPE = 'widenative'
		);

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

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

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

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

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

So verwenden Sie Datenformate für Massenimport oder Massenexport

Weitere Informationen

bcp (Hilfsprogramm)
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Datentypen (Transact-SQL)