Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Unicode-teckenformat 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/DBCS-tecken. Unicode-teckendataformatet tillåter att data exporteras från en server med hjälp av en kodsida som skiljer sig från den kodsida som används av klienten som utför åtgärden. I sådana fall har användningen av Unicode-teckenformat följande fördelar:
Om käll- och måldata är Unicode-datatyper bevarar användningen av Unicode-teckenformatet alla teckendata.
Om käll- och måldata inte är Unicode-datatyper minimerar användningen av Unicode-teckenformat förlusten av utökade tecken i källdata som inte kan representeras på målet.
Överväganden för att använda Unicode-teckenformat
När du använder Unicode-teckenformat bör du tänka på:
Som standardinställning separerar bcp-verktyget teckendatafälten med tabbtecknet och avslutar posterna med nyradstecknet. Information om hur du anger alternativa avslut finns i Ange fält- och radavgränsare (SQL Server).
De sql_variant data som lagras i en Unicode-datafil i teckenformat fungerar på samma sätt som i en datafil i teckenformat, förutom att data lagras som nchar i stället för teckendata . Mer information om teckenformat finns i Stöd för sortering och Unicode.
Särskilda överväganden för att använda Unicode-teckenformat, bcp och en formatfil
Unicode-teckenformatdatafiler följer konventionerna för Unicode-filer. De första två byteen i filen är hexadecimala tal, 0xFFFE. Dessa byte fungerar som byteordningsmärken (BOM) och anger om byte med hög ordning lagras först eller sist i filen. Bcp-verktyget kan misstolka strukturlistan och orsaka att en del av importprocessen misslyckas. du kan få ett felmeddelande som liknar följande:
Starting copy...
SQLState = 22005, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid character value for cast specification
BOM kan misstolkas under följande villkor:
Bcp-verktyget används och växeln
-wanvänds för att ange Unicode-teckenEn formatfil används
Det första fältet i datafilen är inte tecken
Överväg om någon av följande lösningar kan vara tillgängliga för din specifika situation:
Använd inte en formatfil. Ett exempel på den här lösningen finns i teckenformatet Using bcp and Unicode to Import Data without a format file (Använda bcp- och Unicode-teckenformat för att importera data utan en formatfil),
Använd brytaren
-ci stället för-w,Exportera data igen med ett internt format,
Använd BULK INSERT (Transact-SQL) eller OPENROWSET (Transact-SQL). Exempel på dessa lösningar finns i avsnitten Använda BULK INSERT och Unicode-teckenformat med en fil som inte är i XML-format och Använda OPENROWSET och Unicode-teckenformat med en fil som inte är i XML-format.
Infoga den första posten manuellt i måltabellen och använd sedan
-F 2-växeln för att påbörja importen från den andra posten.Infoga först en dummy-post manuellt i datafilen och använd sedan
-F 2växel för att påbörja importen vid den andra posten. Ett exempel på den här lösningen finns i avsnittet Använda bcp och Unicode-teckenformat för att importera data med en icke-XML-formatfil.Använd en mellanlagringstabell där den första kolumnen är en teckendatatyp, eller
Exportera data igen och ändra datafältordningen så att det första datafältet är tecken. Använd sedan en formatfil för att mappa om datafältet till den faktiska ordningen i tabellen. Ett exempel finns i Använda en formatfil för att mappa tabellkolumner till datafilfält (SQL Server).
Kommandoalternativ för Unicode-teckenformat
Du kan importera Unicode-teckenformatdata till en tabell med bcp, BULK INSERT eller OPENROWSET. För ett bcp-kommando eller EN BULK INSERT-instruktion kan du ange dataformatet i -instruktionen. För en OPENROWSET-instruktion måste du ange dataformatet i en formatfil.
Unicode-teckenformat stöds av följande kommandoalternativ:
| Befallning | Alternativ | Beskrivning |
|---|---|---|
bcp |
-w |
Använder Unicode-teckenformatet. |
BULK INSERT |
DATAFILETYPE ='widechar' |
Använder Unicode-teckenformat vid massimport av data. |
OPENROWSET |
Inte tillgänglig | Måste använda en formatfil |
Anmärkning
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 den här artikeln baseras på följande tabell- och formatfil.
Exempeltabell
Följande skript skapar en testdatabas, en tabell med namnet myWidechar och fyller 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.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;
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, myWidechar.fmt, baserat på schemat för myWidechar. 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.myWidechar format nul -f D:\BCP\myWidechar.fmt -T -w
REM Review file
Notepad D:\BCP\myWidechar.fmt
Viktigt!
Se till att filen i annat format än XML slutar med vagnretur och radmatning. Annars kan du få följande felmeddelande:
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file
Exempel
Följande exempel använder databasen och formaterar filer som skapats tidigare.
Använd bcp- och Unicode-teckenformat för att exportera data
-w omkopplare och OUT kommando. 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.myWidechar OUT D:\BCP\myWidechar.bcp -T -w
REM Review results
NOTEPAD D:\BCP\myWidechar.bcp
Använd bcp- och Unicode-teckenformat för att importera data utan en formatfil
-w omkopplare och IN kommando. I en kommandotolk anger du följande kommandon:
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
Använd bcp- och Unicode-teckenformat för att importera data med en fil som inte är XML-format
-w- och -f-växlar och IN-kommandot. En lösning måste användas eftersom det här exemplet omfattar bcp, en formatfil, Unicode-tecken och det första datafältet i datafilen är icke-tecken. Se Särskilda överväganden för att använda Unicode-teckenformat, bcp och en formatfil tidigare i artikeln. Datafilen myWidechar.bcp ändras genom att lägga till en extra post som en "dummy"-post, vilken sedan hoppas över med omkopplaren -F 2.
I en kommandotolk anger du följande kommandon och följer ändringsstegen:
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
Använd BULK INSERT- och Unicode-teckenformat utan formatfil
DATAFILETYPE argument. Kör följande Transact-SQL i Microsoft SQL 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;
Använd BULK INSERT- och Unicode-teckenformat 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.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;
Använda OPENROWSET- och Unicode-teckenformat 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.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;
Relaterade uppgifter
Så här använder du dataformat för massimport eller massexport
- Importera interna data och teckenformatdata från tidigare versioner av SQL Server
- Använd teckenformat för att importera eller exportera data (SQL Server)
- Använda internt format för att importera eller exportera data (SQL Server)
- Använda unicode-inbyggt format för att importera eller exportera data (SQL Server)