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.

Kommandoalternativ för unicode-inbyggt format

Du kan importera unicode-inbyggda formatdata till en tabell med bcp, BULK INSERT eller OPENROWSET BULK.

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

Befallning Alternativ Beskrivning
bcp -N bcp Gör att verktyget använder unicode-inbyggt format, som använder inbyggda datatyper (databas) för alla icke-teckendata och Unicode-teckendataformat för alla teckendata (char, nchar, varchar, nvarchar, text och ntext).
BULK INSERT 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å exempeltabellen myWidenative och formatfilen myWidenative.fmt. Ersätt de lokala filsökvägarna med en lokal filsökväg på ditt system.

Exempeltabell

Följande skript skapar en testdatabas, en tabell med namnet myWidenative och fyller tabellen med några inledande värden. Kör följande Transact-SQL:

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 med icke-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. Mer information finns i Använda filer som inte är XML-format (SQL Server). 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.
  • c används för att ange teckendata
  • 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

Strömbrytaren -N och kommandot OUT.

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änd bcp- och Unicode-format för att importera data utan en formatfil

Strömbrytaren -N 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änd bcp- och Unicode-inbyggt format för att importera data med en fil som inte är XML-format

-N och -f växlar och IN kommando.

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änd BULK INSERT och Unicode-format utan formatfil

Argumentet DATAFILETYPE.

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änd BULK INSERT- och Unicode-format med en fil som inte är XML-format

Argumentet FORMATFILE.

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änd OPENROWSET och Unicode ursprungsformat med en fil som inte är XML-format

Argumentet FORMATFILE.

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: