Dela via


Använda unicode-inbyggt format för att importera eller exportera data (SQL Server)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Unicode-inbyggt format är användbart när information måste kopieras från en Microsoft SQL Server-installation till en annan. Användningen av internt format för icke-teckendata sparar tid, vilket eliminerar onödig konvertering av datatyper till och från teckenformat. Användningen av Unicode-teckenformat för alla teckendata förhindrar förlust av utökade tecken vid massöverföring av data mellan servrar med olika kodsidor. En datafil i unicode-format kan läsas med valfri massimportmetod.

Unicode-inbyggt format rekommenderas för massöverföring av data mellan flera instanser av SQL Server med hjälp av en datafil som innehåller utökade tecken eller DBCS-tecken. För icke-teckendata använder unicode-inbyggt format inbyggda datatyper (databas). För teckendata, till exempel tecken, nchar, varchar, nvarchar, text, varchar(max), nvarchar(max)och ntextanvänder Unicodes inhemska teckendataformat.

De sql_variant data som lagras som en SQLVARIANT i en unicode-datafil i inbyggt format fungerar på samma sätt som i en datafil i internt format, förutom att tecken och varchar värden konverteras till nchar och nvarchar, vilket fördubblar mängden lagringsutrymme som krävs för de berörda kolumnerna. De ursprungliga metadata bevaras och värdena konverteras tillbaka till deras ursprungliga tecken och varchar datatyp när de massimporteras till en tabellkolumn.

I det här avsnittet:
kommandoalternativ för unicode-inbyggt format
Exempel på testvillkor
 ● Exempeltabell
 ● exempelfil i icke-XML-format
Exempel
 ● Använda bcp- och Unicode-inbyggt format för att exportera data
 ● Använda bcp- och Unicode-ursprungsformat för att importera data utan formatfil
 ● Använda bcp- och Unicode-inbyggt format för att importera data med en fil som inte är XML-format
 ● Använda MASSINFOGNING och Unicode-nativformat utan en formatfil
 ● Använda BULK INSERT- och Unicode-inbyggt format med en fil som inte är XML-format
 ● Använda OPENROWSET- och Unicode-inbyggt format med en fil som inte är XML-format
Relaterade Uppgifter

Kommandoalternativ för unicode-inbyggt format

Du kan importera unicode-inbyggda formatdata till en tabell med hjälp av bcp, BULK INSERT eller INSERT ... VÄLJ * FRÅN OPENROWSET(BULK...). För ett bcp-kommando eller BULK INSERT--instruktion kan du ange dataformatet i -instruktionen. För en INSERT ... VÄLJ * FRÅN OPENROWSET(BULK...)-instruktion måste du ange dataformatet i en formatfil.

Unicode-inbyggt format stöds av följande kommandoalternativ:

Befallning Alternativ Beskrivning
bcp -N Gör att verktyget bcp använder Unicode-nativt format, som använder inbyggda datatyper för alla icke-teckendata och Unicode-teckendataformat för all teckendata (char, nchar, varchar, nvarchar, textoch ntext).
BULKIMPORT DATAFILETYPE ='widenative' Använder unicode-inbyggt format vid massimport av data.
OPENROWSET Ej tillämpligt Måste använda en formatfil

Not

Du kan också ange formatering per fält i en formatfil. Mer information finns i Formatera filer för att importera eller exportera data (SQL Server).

Exempel på testvillkor

Exemplen i det här avsnittet baseras på tabellen och formatfilen som definieras nedan.

exempeltabell

Skriptet nedan skapar en testdatabas, en tabell med namnet myWidenative och fyller i tabellen med några inledande värden. Kör följande Transact-SQL i Microsoft SQL Server Management Studio (SSMS):

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;

exempelfil som inte är XML-format

SQL Server stöder två typer av formatfiler: icke-XML-format och XML-format. Icke-XML-format är det ursprungliga format som stöds av tidigare versioner av SQL Server. Vänligen granska Icke-XML-formatfiler (SQL Server) för mer detaljerad information. Följande kommando använder verktyget bcp för att generera en fil som inte är xml-format, myWidenative.fmt, baserat på schemat för myWidenative. Om du vill använda kommandot bcp för att skapa en formatfil anger du argumentet format och använder nul i stället för en datafilsökväg. Formatalternativet kräver också alternativet -f. I det här exemplet används dessutom c för att ange teckendata, och T- används för att ange en betrodd anslutning med integrerad säkerhet. I en kommandotolk anger du följande kommandon:

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

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

Viktig

Se till att icke-XML-filen slutar med en vagnretur\radmatning. Annars får du troligen följande felmeddelande:

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

Exempel

Exemplen nedan använder databasen och formaterar filer som skapats ovan.

Använda bcp- och Unicode-inbyggt format för att exportera data

-N switch och kommandot OUT. Obs! Datafilen som skapas i det här exemplet används i alla efterföljande exempel. I en kommandotolk anger du följande kommandon:

bcp TestDatabase.dbo.myWidenative OUT D:\BCP\myWidenative.bcp -T -N

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

Använda bcp- och Unicode-inbyggt format för att importera data utan

-N switch och kommandot IN. I en kommandotolk anger du följande kommandon:

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

Använda bcp- och Unicode-inbyggt format för att importera data med en fil som inte är XML-format

-N och -f växlar och kommandot IN. I en kommandotolk anger du följande kommandon:

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

Använda BULK INSERT och Unicode-native format utan formatfil

DATAFILETYPE ARGUMENTET. Kör följande Transact-SQL i Microsoft SQL Server Management Studio (SSMS):

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;

Använda MASSINFOGNING och Unicode-inbyggt format med en fil som inte är XML-format

FORMATFILE argument. Kör följande Transact-SQL i Microsoft SQL Server Management Studio (SSMS):

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;

Använda OPENROWSET och Unicode Native Format med en icke-XML-formatfil

FORMATFILE argument. Kör följande Transact-SQL i Microsoft SQL Server Management Studio (SSMS):

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;

Så här använder du dataformat för massimport eller massexport

Se även

bcp Utility
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
datatyper (Transact-SQL)