Gunakan format karakter unicode untuk mengimpor atau mengekspor data (SQL Server)

Berlaku untuk: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Format karakter Unicode direkomendasikan untuk transfer data secara massal antara beberapa instans SQL Server dengan menggunakan file data yang berisi karakter yang diperluas/DBCS. Format data karakter Unicode memungkinkan data diekspor dari server dengan menggunakan halaman kode yang berbeda dari halaman kode yang digunakan oleh klien yang melakukan operasi. Dalam kasus seperti itu, penggunaan format karakter Unicode memiliki keuntungan berikut:

  • Jika data sumber dan tujuan adalah jenis data Unicode, penggunaan format karakter Unicode mempertahankan semua data karakter.

  • Jika data sumber dan tujuan bukan tipe data Unicode, penggunaan format karakter Unicode meminimalkan hilangnya karakter yang diperluas dalam data sumber yang tidak dapat diwakili di tujuan.

Dalam Topik ini:
Pertimbangan untuk Menggunakan Format Karakter Unicode
Pertimbangan Khusus untuk Menggunakan Format Karakter Unicode, bcp, dan File Format
Opsi Perintah untuk Format Karakter Unicode
Contoh Kondisi Pengujian
 ● Tabel Sampel
 ● Contoh File Format Non-XML
Contoh
 ● Menggunakan Format Karakter bcp dan Unicode untuk Mengekspor Data
 ● Menggunakan Format Karakter bcp dan Unicode untuk Mengimpor Data tanpa File Format
 ● Menggunakan Format Karakter bcp dan Unicode untuk Mengimpor Data dengan File Format Non-XML
 ● Menggunakan BULK INSERT dan Unicode Character Format tanpa Format File
 ● Menggunakan BULK INSERT dan Unicode Character Format dengan File Format Non-XML
 ● Menggunakan OPENROWSET dan Format Karakter Unicode dengan File Format Non-XML
Tugas Terkait

Pertimbangan untuk Menggunakan Format Karakter Unicode

Saat menggunakan format karakter Unicode, pertimbangkan hal berikut:

Pertimbangan Khusus untuk Menggunakan Format Karakter Unicode, bcp, dan File Format

File data format karakter Unicode mengikuti konvensi untuk file Unicode. Dua byte pertama file adalah angka heksadesimal, 0xFFFE. Byte ini berfungsi sebagai tanda urutan byte (BOM), menentukan apakah byte urutan tinggi disimpan terlebih dahulu atau terakhir dalam file. Utilitas bcp dapat salah menafsirkan BOM dan menyebabkan bagian dari proses impor Anda gagal; Anda mungkin menerima pesan kesalahan yang mirip dengan berikut:

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

BoM dapat disalahartikan dalam kondisi berikut:

  • Utilitas bcp digunakan dan sakelar -w digunakan untuk menunjukkan karakter Unicode

  • File format digunakan

  • Bidang pertama dalam file data adalah non-karakter

Pertimbangkan apakah salah satu solusi berikut mungkin tersedia untuk situasi spesifik Anda:

Opsi Perintah untuk Format Karakter Unicode

Anda dapat mengimpor data format karakter Unicode ke dalam tabel menggunakan bcp, BULK INSERT atau INSERT ... PILIH * DARI OPENROWSET(MASSAL...). Untuk perintah bcp atau pernyataan BULK INSERT , Anda dapat menentukan format data dalam pernyataan . Untuk INSERT ... PILIH * DARI OPENROWSET(MASSAL...) pernyataan , Anda harus menentukan format data dalam file format.

Format karakter Unicode didukung oleh opsi perintah berikut:

Perintah Opsi Deskripsi
bcp -W Menggunakan format karakter Unicode.
BULK INSERT DATAFILETYPE ='widechar' Menggunakan format karakter Unicode saat mengimpor data secara massal.
OPENROWSET T/A Harus menggunakan file format

Catatan

Atau, Anda dapat menentukan pemformatan berdasarkan per bidang dalam file format. Untuk informasi selengkapnya, lihat Memformat File untuk Mengimpor atau Mengekspor Data (SQL Server).

Contoh Kondisi Pengujian

Contoh dalam topik ini didasarkan pada tabel, dan format file yang ditentukan di bawah ini.

Tabel Sampel

Skrip di bawah ini membuat database pengujian, tabel bernama myWidechar dan mengisi tabel dengan beberapa nilai awal. Jalankan Transact-SQL berikut di 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;

Contoh File Format Non-XML

SQL Server mendukung dua jenis file format: format non-XML dan format XML. Format non-XML adalah format asli yang didukung oleh versi SQL Server sebelumnya. Silakan tinjau File Format Non-XML (SQL Server) untuk informasi terperinci. Perintah berikut akan menggunakan utilitas bcp untuk menghasilkan file format non-xml, myWidechar.fmt, berdasarkan skema myWidechar. Untuk menggunakan perintah bcp untuk membuat file format, tentukan argumen format dan gunakan nul alih-alih jalur file data. Opsi format juga memerlukan opsi -f . Selain itu, untuk contoh ini, kualifikasi c digunakan untuk menentukan data karakter, dan T digunakan untuk menentukan koneksi tepercaya menggunakan keamanan terintegrasi. Pada prompt perintah, masukkan perintah berikut:

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

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

Penting

Pastikan file format non-XML Anda berakhir dengan pengangkutan return\line feed. Jika tidak, Anda mungkin akan menerima pesan kesalahan berikut:

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

Contoh

Contoh di bawah ini menggunakan database, dan memformat file yang dibuat di atas.

Menggunakan Format Karakter bcp dan Unicode untuk Mengekspor Data

-w switch dan perintah OUT . Catatan: file data yang dibuat dalam contoh ini akan digunakan dalam semua contoh berikutnya. Pada prompt perintah, masukkan perintah berikut:

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

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

Menggunakan Format Karakter bcp dan Unicode untuk Mengimpor Data tanpa File Format

-w switch dan perintah IN . Pada prompt perintah, masukkan perintah berikut:

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

Menggunakan Format Karakter bcp dan Unicode untuk Mengimpor Data dengan File Format Non-XML

-w dan -f switches dan perintah IN . Solusi perlu digunakan karena contoh ini melibatkan bcp, file format, karakter Unicode, dan bidang data pertama dalam file data adalah non-karakter. Lihat Pertimbangan Khusus untuk Menggunakan Format Karakter Unicode, bcp, dan File Format, di atas. File myWidechar.bcp data akan diubah dengan menambahkan rekaman tambahan sebagai rekaman "dummy" yang kemudian akan dilewati dengan -F 2 sakelar.

Pada prompt perintah, masukkan perintah berikut dan ikuti langkah-langkah modifikasi:

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

Menggunakan INSERT MASSAL dan Format Karakter Unicode tanpa Format File

Argumen DATAFILETYPE . Jalankan Transact-SQL berikut di 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;

Menggunakan INSERT MASSAL dan Format Karakter Unicode dengan File Format Non-XML

Argumen FORMATFILE . Jalankan Transact-SQL berikut di 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;

Menggunakan OpenROWSET dan Format Karakter Unicode dengan File Format Non-XML

Argumen FORMATFILE . Jalankan Transact-SQL berikut di 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;

Untuk menggunakan format data untuk impor massal atau ekspor massal

Lihat juga

utilitas bcp
SISIPAN MASSAL (Transact-SQL)
OPENROWSET (Transact-SQL)
Tipe Data (Transact-SQL)
Kolajeasi dan Dukungan Unicode