Bagikan melalui


Menggunakan format karakter untuk mengimpor atau mengekspor data (SQL Server)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Warehouse di Microsoft Fabric

Format karakter disarankan ketika Anda mengekspor data secara massal ke file teks yang akan digunakan dalam program lain atau ketika Anda mengimpor data secara massal dari file teks yang dihasilkan oleh program lain.

Format karakter menggunakan format data karakter untuk semua kolom. Menyimpan informasi dalam format karakter berguna ketika data digunakan dengan program lain, seperti spreadsheet, atau ketika data perlu disalin ke dalam instans SQL Server dari vendor database lain seperti Oracle.

Catatan

Saat Anda mentransfer data secara massal antara instans SQL Server dan file data berisi data karakter Unicode tetapi tidak ada karakter yang diperluas atau DBCS, gunakan format karakter Unicode. Untuk informasi selengkapnya, lihat Menggunakan format karakter Unicode untuk mengimpor atau mengekspor data (SQL Server).

Pertimbangan untuk menggunakan format karakter

Saat menggunakan format karakter, pertimbangkan:

  • Secara bawaan, utilitas bcp memisahkan bidang data karakter dengan karakter tab dan mengakhiri rekaman dengan karakter baris baru. Untuk informasi tentang cara menentukan terminator alternatif, lihat Menentukan terminator bidang dan baris (SQL Server).

  • Secara default, sebelum ekspor massal atau impor data mode karakter, konversi berikut dilakukan:

    Arah operasi besar-besaran Konversi
    Ekspor Mengonversi data menjadi representasi karakter. Jika diminta secara eksplisit, data dikonversi ke halaman kode yang diminta untuk kolom karakter. Jika tidak ada halaman kode yang ditentukan, data karakter dikonversi dengan menggunakan halaman kode OEM komputer klien.
    Impor Mengonversi data karakter menjadi representasi asli, jika perlu, dan menerjemahkan data karakter dari halaman kode klien ke halaman kode dari satu atau beberapa kolom target.
  • Untuk mencegah hilangnya karakter yang diperluas selama konversi, gunakan format karakter Unicode atau tentukan halaman kode.

  • Data sql_variant apa pun yang disimpan dalam file format karakter disimpan tanpa metadata. Setiap nilai data dikonversi ke format karakter , sesuai dengan aturan konversi data implisit. Saat diimpor ke kolom sql_variant , data diimpor sebagai karakter. Saat diimpor ke kolom dengan jenis data selain sql_variant, data dikonversi dari karakter dengan menggunakan konversi implisit. Untuk informasi selengkapnya tentang konversi data, lihat konversi jenis data (Mesin Database).

  • Utilitas bcp mengekspor nilai uang sebagai file data format karakter dengan empat digit setelah titik desimal dan tanpa simbol pengelompokan digit seperti pemisah koma. Misalnya, kolom uang yang berisi nilai 1,234,567.123456 diekspor secara massal ke file data sebagai string karakter 1234567.1235.

Opsi perintah untuk format karakter

Anda dapat mengimpor data format karakter ke dalam tabel menggunakan bcp, BULK INSERT (Transact-SQL), atau OPENROWSET (BULK). Untuk perintah bcp atau pernyataan BULK INSERT (Transact-SQL), Anda dapat menentukan format data dalam pernyataan. Untuk pernyataan OPENROWSET (BULK), Anda harus menentukan format data dalam file format.

Format karakter didukung oleh opsi perintah berikut:

Perintah Opsi Deskripsi
bcp -c Memungkinkan utilitas bcp untuk menggunakan data karakter. 1
BULK INSERT DATAFILETYPE ='char' Gunakan format karakter saat mengimpor data secara massal.
OPENROWSET Tidak Berlaku Harus menggunakan file format

1 Untuk memuat data karakter (-c) ke format yang kompatibel dengan versi klien SQL Server yang lebih lama, gunakan sakelar -V . Untuk informasi selengkapnya, lihat Mengimpor data format bawaan dan karakter dari versi SQL Server yang lebih lama.

Catatan

Atau, Anda dapat menentukan pemformatan berdasarkan per bidang dalam file format. Untuk informasi selengkapnya, lihat Format file untuk mengimpor atau mengekspor data (SQL Server).

Contoh kondisi pengujian

Contoh dalam artikel ini didasarkan pada tabel dan file format berikut.

Tabel sampel

Skrip berikut membuat database pengujian, tabel bernama myChar 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.myChar
(
    PersonID SMALLINT NOT NULL,
    FirstName VARCHAR (25) NOT NULL,
    LastName VARCHAR (30) NOT NULL,
    BirthDate DATE,
    AnnualSalary MONEY
);

-- Populate table
INSERT TestDatabase.dbo.myChar
VALUES (1, 'Anthony', 'Grosse', '1980-02-23', 65000.00),
       (2, 'Alica', 'Fatnowna', '1963-11-14', 45000.00),
       (3, 'Stella', 'Rossenhain', '1992-03-02', 120000.00);

-- Review data
SELECT * FROM TestDatabase.dbo.myChar;

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. Untuk informasi selengkapnya, lihat Menggunakan file format Non-XML (SQL Server). Perintah berikut menggunakan utilitas bcp untuk menghasilkan file format non-XML, myChar.fmt, berdasarkan skema myChar. 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, c digunakan untuk menentukan data karakter, dan T digunakan untuk menentukan koneksi tepercaya menggunakan integrasi keamanan.

Pada prompt perintah, masukkan perintah berikut:

bcp TestDatabase.dbo.myChar format nul -f D:\BCP\myChar.fmt -T -c

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

Penting

Pastikan file format non-XML Anda berakhir dengan return\line feed pengangkutan. Jika tidak, Anda mungkin 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 berikut menggunakan database dan format file yang dibuat sebelumnya dalam artikel ini.

Menggunakan format bcp dan karakter untuk mengekspor data

-c sakelar dan perintah OUT.

File data yang dibuat dalam contoh ini digunakan dalam semua contoh berikutnya.

Pada prompt perintah, masukkan perintah berikut:

bcp TestDatabase.dbo.myChar OUT D:\BCP\myChar.bcp -T -c

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

Menggunakan format bcp dan karakter untuk mengimpor data tanpa file format

Perintah sakelar -c dan IN. Pada prompt perintah, masukkan perintah berikut:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myChar;"

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -T -c

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

Menggunakan format bcp dan karakter untuk mengimpor data dengan file format non-XML

Tombol -c, -f, dan perintah IN. Pada prompt perintah, masukkan perintah berikut:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myChar;"

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -f D:\BCP\myChar.fmt -T

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

Gunakan BULK INSERT dan format karakter tanpa menggunakan file format.

Argumen DATAFILETYPE. Jalankan Transact-SQL berikut di Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing

BULK INSERT TestDatabase.dbo.myChar FROM 'D:\BCP\myChar.bcp'
    WITH (DATAFILETYPE = 'Char');

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

Gunakan BULK INSERT dan format karakter dengan file format non-XML

Ini adalah contoh argumen FORMATFILE. Jalankan Transact-SQL berikut di Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing

BULK INSERT TestDatabase.dbo.myChar FROM 'D:\BCP\myChar.bcp'
    WITH (FORMATFILE = 'D:\BCP\myChar.fmt');

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

Gunakan OPENROWSET dan format karakter dengan file format non-XML

Contoh argumen FORMATFILE. Jalankan Transact-SQL berikut di Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing

INSERT INTO TestDatabase.dbo.myChar
SELECT * FROM OPENROWSET (
    BULK 'D:\BCP\myChar.bcp',
    FORMATFILE = 'D:\BCP\myChar.fmt'
) AS t1;

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

Untuk menggunakan format data untuk impor massal atau ekspor massal: