Megosztás a következőn keresztül:


Unicode karakterformátum használata adatok importálásához vagy exportálásához (SQL Server)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Unicode karakterformátum használata az SQL Server több példánya közötti tömeges adattovábbításhoz ajánlott kiterjesztett/DBCS-karaktereket tartalmazó adatfájl használatával. A Unicode karakter adatformátum lehetővé teszi az adatok kiszolgálóról való exportálását egy olyan kódlap használatával, amely eltér a műveletet végrehajtó ügyfél által használt kódlaptól. Ilyen esetekben a Unicode karakterformátum használata a következő előnyökkel jár:

  • Ha a forrás- és céladatok Unicode-adattípusok, a Unicode karakterformátum használata megőrzi az összes karakteradatot.

  • Ha a forrás- és céladatok nem Unicode-adattípusok, a Unicode karakterformátum használata minimálisra csökkenti a forrásadatokban a kiterjesztett karakterek elvesztését, amelyek nem jeleníthetők meg a célhelyen.

A Unicode-karakterformátum használatának szempontjai

Unicode-karakterformátum használata esetén fontolja meg a következő szempontokat:

  • Alapértelmezés szerint a bcp segédprogram elválasztja a karakter-adat mezőket a tabulátor karakterrel, és az új vonal karakterrel lezárja a rekordokat. Az alternatív terminátorok megadásáról további információt a mező- és sor-terminátorok (SQL Server) megadása című témakörben talál.

  • A Unicode karakterformátumú adatfájlban tárolt sql_variant adatok ugyanúgy működnek, mint egy karakterformátumú adatfájlban, azzal a kivételével, hogy az adatok nchar tárolódnak karakteres adatok helyett. További információ a karakterformázási beállításokról: lásd Rendezés és Unicode-támogatás.

A Unicode-karakterformátum, a bcp és a formátumfájl használatának speciális szempontjai

A Unicode-karakterformátumú adatfájlok a Unicode-fájlok konvencióit követik. A fájl első két bájtja hexadecimális szám, 0xFFFE. Ezek a bájtok bájtsorrendjelként (BOM) szolgálnak, amely meghatározza, hogy a magas szintű bájtot a fájlban tárolja-e először vagy utoljára. Előfordulhat, hogy a bcp segédprogram félreértelmezi az anyagjegyzéket, és az importálási folyamat egy része meghiúsul; az alábbiakhoz hasonló hibaüzenet jelenhet meg:

Starting copy...
SQLState = 22005, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid character value for cast specification

Az anyagjegyzék a következő feltételekkel tévesen értelmezhető:

  • A rendszer a bcp segédprogramot használja, a kapcsoló pedig -w Unicode-karakter jelzésére szolgál

  • Formátumfájlt használunk

  • Az adatfájl első mezője nem karakter

Gondolja át, hogy az alábbi áthidaló megoldások bármelyike elérhető-e az Adott helyzethez:

Unicode-karakterformátum parancsbeállításai

Unicode karakterformátumú adatokat importálhat egy táblába a bcp, a BULK INSERT vagy az OPENROWSET használatával. Bcp-parancs vagy BULK INSERT utasítás esetén megadhatja az adatformátumot az utasításban. OPENROWSET utasítás esetén meg kell adnia az adatformátumot egy formátumfájlban.

A Unicode karakterformátumot a következő parancsbeállítások támogatják:

Parancs Opció Leírás
bcp -w Unicode karakterformátumot használ.
BULK INSERT DATAFILETYPE ='widechar' Unicode karakterformátumot használ az adatok tömeges importálásakor.
OPENROWSET Nincs adat. Formátumfájlt kell használnia

Jegyzet

Másik lehetőségként megadható a formázás mezőnkénti alapon egy formátumfájlban. További információkért tekintse meg az adatok importálásához vagy exportálásához használt fájlok formázását (SQL Server).

Példa tesztelési feltételekre

A cikkben szereplő példák a következő táblázaton és formátumfájlon alapulnak.

Mintatábla

A következő szkript létrehoz egy tesztadatbázist, egy myWidechar nevű táblát, és feltölti a táblát néhány kezdeti értékkel. Hajtsa végre a következő Transact-SQL a Microsoft SQL Server Management Studióban (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;

Nem XML formátumú minta fájl

Az SQL Server kétféle formátumfájlt támogat: nem XML- és XML-formátumot. A nem XML formátum az SQL Server korábbi verziói által támogatott eredeti formátum. További információ: Nem XML formátumú fájlok használata (SQL Server).

Az alábbi parancs a bcp segédprogram használatával hoz létre egy nem XML formátumú fájlt, myWidechar.fmta myWidecharsémája alapján. Ha bcp parancsot szeretne használni egy formátumfájl létrehozásához, adja meg a format argumentumot, és adatfájl elérési útja helyett használja a nul. A formátumbeállításhoz szükség van a -f beállításra is. Ezen kívül ebben a példában a minősítő c karakteradatok megadására, T pedig megbízható kapcsolat megadására szolgál az integrált biztonság használatával. A parancssorban adja meg a következő parancsokat:

bcp TestDatabase.dbo.myWidechar format nul -f D:\BCP\myWidechar.fmt -T -w

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

Fontos

Győződjön meg arról, hogy a nem XML formátumú fájl egy kocsivissza\sor hírcsatornával végződik. Ellenkező esetben a következő hibaüzenet jelenhet meg:

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

Példák

Az alábbi példák az adatbázist használják, és formázza a korábban létrehozott fájlokat.

Adatok exportálása bcp- és Unicode-karakterformátummal

-w kapcsoló és OUT parancs. Az ebben a példában létrehozott adatfájl minden további példában használatos. A parancssorban adja meg a következő parancsokat:

bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w

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

Adatok importálása formátumfájl nélkül bcp- és Unicode-karakterformátummal

-w kapcsoló és IN parancs. A parancssorban adja meg a következő parancsokat:

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

Adatok importálása nem XML formátumú fájllal bcp és Unicode karakterformátummal

-w és -f kapcsolók és IN parancs. Áthidaló megoldást kell használni, mivel ebben a példában szerepel a bcp, a formátumfájl, a Unicode karakter, és az adatfájl első adatmezője nem karakter. A Unicode-karakterformátum, a bcp és a formátumfájl használatának speciális szempontjai a cikk korábbi részében olvashatók. Az adatfájlt myWidechar.bcp úgy módosítja a rendszer, hogy hozzáad egy további rekordot "dummy" rekordként, amelyet aztán kihagy a -F 2 kapcsolóval.

A parancssorban adja meg a következő parancsokat, és kövesse a módosítási lépéseket:

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

Tömeges beszúrás és Unicode karakterformátum használata formátumfájl nélkül

DATAFILETYPE érv. Hajtsa végre a következő Transact-SQL a Microsoft SQL Server Management Studióban (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;

Használja a TÖMEGES BESZÚRÁST és Unicode karakterformátumot nem XML formátumú fájllal

FORMATFILE érv. Hajtsa végre a következő Transact-SQL a Microsoft SQL Server Management Studióban (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;

OPENROWSET és Unicode karakterformátum használata nem XML formátumú fájllal

FORMATFILE érv. Hajtsa végre a következő Transact-SQL a Microsoft SQL Server Management Studióban (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;

Adatformátumok használata tömeges importáláshoz vagy tömeges exportáláshoz