Aracılığıyla paylaş


Verileri içeri veya dışarı aktarmak için Unicode karakter biçimini kullanma (SQL Server)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)

Genişletilmiş/DBCS karakterleri içeren bir veri dosyası kullanılarak birden çok SQL Server örneği arasında verilerin toplu aktarımı için Unicode karakter biçimi önerilir. Unicode karakter veri biçimi, işlemi gerçekleştiren istemci tarafından kullanılan kod sayfasından farklı bir kod sayfası kullanılarak verilerin bir sunucudan dışarı aktarılmasını sağlar. Bu gibi durumlarda, Unicode karakter biçiminin kullanılması aşağıdaki avantajlara sahiptir:

  • Kaynak ve hedef veriler Unicode veri türleriyse, Unicode karakter biçiminin kullanılması tüm karakter verilerini korur.

  • Kaynak ve hedef veriler Unicode veri türleri değilse, Unicode karakter biçiminin kullanılması, kaynak verilerde hedefte gösterilemeyecek genişletilmiş karakter kaybını en aza indirir.

Unicode karakter biçimini kullanma konusunda dikkat edilmesi gerekenler

Unicode karakter biçimini kullanırken şunları göz önünde bulundurun:

  • Varsayılan olarak, bcp yardımcı programı karakter-veri alanlarını sekme karakteriyle ayırır ve kayıtları yeni satır karakteriyle sonlandırır. Alternatif sonlandırıcıları belirtme hakkında bilgi için bkz. Alan ve satır sonlandırıcılarını belirtme (SQL Server).

  • Unicode karakter biçimi veri dosyasında depolanan sql_variant verileri, karakter biçimindeki veri dosyasında çalıştığı şekilde çalışır, ancak veriler char verileri yerine nchar olarak depolanır. Karakter biçimi hakkında daha fazla bilgi için bkz. Harmanlama ve Unicode desteği.

Unicode karakter biçimi, bcp ve biçim dosyası kullanma konusunda dikkat edilmesi gerekenler

Unicode karakter biçimi veri dosyaları, Unicode dosyaları için kuralları izler. Dosyanın ilk iki baytı onaltılık sayılardır ve 0xFFFE. Bu baytlar, yüksek sıralı baytın dosyada ilk mi yoksa son mu depolandığını belirten bayt sırası işaretleri (BOM) görevi görür. bcp Yardımcı Programı BOM'u yanlış yorumlayabilir ve içeri aktarma işleminizin bir bölümünün başarısız olmasına neden olabilir; benzeri bir hata mesajı alabilirsiniz.

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

BOM aşağıdaki koşullar altında yanlış yorumlanabilir:

  • bcp Yardımcı Programı kullanılır ve -w Unicode karakterini belirtmek için anahtar kullanılır

  • Biçim dosyası kullanılır

  • Veri dosyasındaki ilk alan karakter dışı

Aşağıdaki geçici çözümlerden herhangi birinin sizin özel durumunuz için kullanılabilir olup olmadığını göz önünde bulundurun:

Unicode karakter biçimi için komut seçenekleri

Bcp, BULK INSERT veya OPENROWSET kullanarak Unicode karakter biçimi verilerini tabloya aktarabilirsiniz. Bcp komutu veya BULK INSERT deyimi için veri biçimini belirtebilirsiniz. OPENROWSET deyimi için, veri biçimini bir biçim dosyasında belirtmeniz gerekir.

Unicode karakter biçimi aşağıdaki komut seçenekleri tarafından desteklenir:

Komut Seçenek Açıklama
bcp -w Unicode karakter biçimini kullanır.
BULK INSERT DATAFILETYPE ='widechar' Verileri toplu içeri aktarırken Unicode karakter biçimini kullanır.
OPENROWSET YOK Biçim dosyası kullanılmalıdır.

Not

Alternatif olarak, biçim dosyasında alan başına biçimlendirme belirtebilirsiniz. Daha fazla bilgi için bkz. verileri içeri veya dışarı aktarmak için dosyaları biçimlendirme (SQL Server).

Örnek test koşulları

Bu makaledeki örnekler aşağıdaki tablo ve biçim dosyasını temel alır.

Örnek tablo

Aşağıdaki betik bir test veritabanı ve myWidechar adlı bir tablo oluşturur ve tabloyu bazı başlangıç değerleriyle doldurur. Microsoft SQL Server Management Studio'da (SSMS) aşağıdaki Transact-SQL yürütün:

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;

ÖRNEK XML olmayan biçim dosyası

SQL Server iki tür biçim dosyasını destekler: XML dışı biçim ve XML biçimi. XML olmayan biçim, SQL Server'ın önceki sürümleri tarafından desteklenen özgün biçimdir. Daha fazla bilgi için bkz. XML dışı biçimli dosyaları kullanma (SQL Server).

Aşağıdaki komut, şemasına bağlı olarak myWidechar.fmtXML olmayan bir biçim dosyası oluşturmak için myWidechar kullanır. Biçim dosyası oluşturmak için bcp komutu kullanmak için format bağımsız değişkenini belirtin ve veri dosyası yolu yerine nul kullanın. Biçim seçeneği de bu seçeneği gerektirir -f . Buna ek olarak, bu örnekte niteleyici c karakter verilerini belirtmek için kullanılır ve T tümleşik güvenlik kullanılarak güvenilen bir bağlantı belirtmek için kullanılır. Komut isteminde aşağıdaki komutları girin:

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

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

Önemli

XML olmayan biçimli dosyanızın satır başı\satır beslemesiyle sona erdiğinden emin olun. Aksi takdirde aşağıdaki hata iletisini alabilirsiniz:

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

Örnekler

Aşağıdaki örneklerde veritabanı kullanılır ve daha önce oluşturulan dosyalar biçimlendirilir.

Verileri Dışarı Aktarmak için bcp ve Unicode karakter biçimini kullanma

-w switch ve OUT command komutunu kullanın. Bu örnekte oluşturulan veri dosyası sonraki tüm örneklerde kullanılır. Komut isteminde aşağıdaki komutları girin:

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

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

Biçim dosyası olmadan Verileri İçeri Aktarmak için bcp ve Unicode karakter biçimini kullanma

-w switch ve IN command komutunu kullanın. Komut isteminde aşağıdaki komutları girin:

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

VERILERI XML olmayan bir biçim dosyasıyla içeri aktarmak için bcp ve Unicode karakter biçimini kullanma

-w ve -f düğmeleri ve IN komut. Bu örnekte bcp, biçim dosyası, Unicode karakteri ve veri dosyasındaki ilk veri alanı karakter dışı olduğundan geçici bir çözüm kullanılmalıdır. Makalenin önceki bölümlerinde Unicode karakter biçimini, bcp'yi ve biçim dosyasını kullanma konusunda dikkat edilmesi gerekenler bölümüne bakın. Veri dosyası myWidechar.bcp, daha sonra anahtar kullanılarak -F 2 atlanacak olan "kukla" kayıt ile ek bir kayıt eklenerek değiştirilir.

Komut isteminde aşağıdaki komutları girin ve değişiklik adımlarını izleyin:

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

Biçim dosyası olmadan BULK INSERT ve Unicode karakter biçimini kullanma

DATAFILETYPE argüman. Microsoft SQL Server Management Studio'da (SSMS) aşağıdaki Transact-SQL yürütün:

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;

BULK INSERT ve Unicode karakter biçimini XML formatı olmayan bir dosyayla kullanma

FORMATFILE argüman. Microsoft SQL Server Management Studio'da (SSMS) aşağıdaki Transact-SQL yürütün:

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;

XML olmayan bir biçim dosyasıyla OPENROWSET ve Unicode karakter biçimi kullanma

FORMATFILE argüman. Microsoft SQL Server Management Studio'da (SSMS) aşağıdaki Transact-SQL yürütün:

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;

Toplu ithalat veya ihracat için veri biçimlerini kullanmak