Cara menggunakan utilitas bcp

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistem Platform Analitik (PDW)Gudang di Microsoft FabricDatabase SQL di Microsoft Fabric

Utilitas program salin massal (bcp) menyalin data secara massal antara instans SQL Server dan file data dalam format yang ditentukan pengguna.

Komentar

  • Untuk informasi tentang tempat menemukan atau cara menjalankan utilitas bcp dan tentang konvensi sintaksis utilitas prompt perintah, lihat utilitas baris perintah SQL (Mesin Database).

  • Untuk informasi tentang menyiapkan data untuk operasi impor atau ekspor massal, lihat Menyiapkan data untuk ekspor atau impor massal.

  • Untuk informasi tentang kapan operasi penyisipan baris yang dilakukan oleh impor massal dicatat dalam log transaksi, lihat Prasyarat untuk pencatatan minimal dalam impor massal.

  • <, >, |, &, dan ^ adalah karakter shell perintah khusus, dan harus didahului oleh karakter escape (^), atau diapit dengan tanda kutip saat digunakan dalam string (misalnya, "StringContaining&Symbol"). Jika Anda menggunakan tanda kutip untuk mengapit string yang berisi salah satu karakter khusus, tanda kutip diatur sebagai bagian dari nilai variabel lingkungan. Untuk informasi selengkapnya, lihat Menggunakan karakter khusus tambahan.

  • bcp saat ini masih dalam pratinjau di Warehouse di Microsoft Fabric.

  • bcp tidak dapat mengimpor data di titik akhir analitik SQL di Microsoft Fabric.

Dukungan file data bawaan

Di SQL Server, utilitas bcp mendukung file data asli yang kompatibel dengan versi SQL Server yang dimulai dengan SQL Server 2000 (8.x) dan yang lebih baru.

Kolom komputasi dan kolom tanda waktu

Nilai dalam file data yang diimpor untuk kolom terhitung atau timestamp diabaikan, dan SQL Server secara otomatis menetapkan nilai. Jika file data tidak berisi nilai untuk kolom komputasi atau tanda waktu dalam tabel, gunakan file format untuk menentukan bahwa kolom komputasi atau tanda waktu dalam tabel harus dilewati saat mengimpor data; SQL Server secara otomatis menetapkan nilai untuk kolom.

Kolom komputasi dan tanda waktu disalin secara massal dari SQL Server ke file data seperti biasa.

Tentukan pengidentifikasi yang berisi spasi atau tanda kutip

Pengidentifikasi SQL Server dapat menyertakan karakter seperti spasi yang disematkan dan tanda kutip. Pengidentifikasi tersebut harus diperlakukan sebagai berikut:

  • Saat Anda menentukan pengidentifikasi atau nama file yang menyertakan spasi atau tanda kutip pada prompt perintah, sertakan pengidentifikasi dalam tanda kutip ("").

    Misalnya, perintah berikut bcp out membuat file data bernama Currency Types.dat:

    bcp AdventureWorks2022.Sales.Currency out "Currency Types.dat" -T -c
    
  • Untuk menentukan nama database yang berisi spasi atau tanda kutip, Anda harus menggunakan opsi .-q

  • Untuk nama pemilik, tabel, atau tampilan yang berisi spasi atau tanda kutip yang disematkan, Anda dapat:

    • Tentukan opsi -q, atau

    • Masukkan nama pemilik, tabel, atau tampilan dalam tanda kurung siku ([]) di dalam tanda kutip.

Validasi Data

bcp sekarang memberlakukan validasi data dan pemeriksaan data yang dapat menyebabkan skrip gagal jika dijalankan pada data yang tidak valid dalam file data. Misalnya, bcp sekarang memverifikasi bahwa:

  • Representasi asli dari jenis data float atau real valid.

  • Data Unicode memiliki panjang byte genap.

Formulir data yang tidak valid yang dapat diimpor secara massal di versi SQL Server sebelumnya dapat gagal dimuat sekarang; sedangkan, dalam versi sebelumnya, kegagalan tidak terjadi sampai klien mencoba mengakses data yang tidak valid. Validasi yang ditambahkan meminimalkan kejutan saat melakukan kueri data setelah pemrosesan massal.

Mengekspor atau mengimpor dokumen SQLXML secara massal

Untuk mengekspor atau mengimpor data SQLXML secara massal, gunakan salah satu jenis data berikut dalam file format Anda.

Jenis data Efek
SQLCHAR atau SQLVARYCHAR Data dikirim di halaman kode klien atau di halaman kode yang disiratkan oleh kolase. Efeknya sama dengan ketika Anda menentukan sakelar -c tanpa menentukan file format.
SQLNCHAR atau SQLNVARCHAR Data dikirim sebagai Unicode. Efeknya sama dengan ketika Anda menentukan sakelar -w tanpa menentukan file format.
SQLBINARY atau SQLVARYBIN Data dikirim tanpa konversi apa pun.

Mode karakter (-c) dan praktik terbaik mode bawaan (-n)

Bagian ini memiliki rekomendasi untuk mode karakter (-c) dan mode asli (-n).

  • (Administrator/Pengguna) Jika memungkinkan, gunakan format asli (-n) untuk menghindari masalah pemisah. Gunakan format asli untuk mengekspor dan mengimpor menggunakan SQL Server. Ekspor data dari SQL Server menggunakan -c opsi atau -w jika Anda berencana untuk mengekspor data ke database non-SQL Server.

  • (Administrator) Verifikasi data saat menggunakan bcp out. Misalnya, saat Anda menggunakan bcp out, bcp in, lalu bcp out memverifikasi bahwa data diekspor dengan benar dan nilai terminator tidak digunakan sebagai bagian dari beberapa nilai data. Pertimbangkan untuk mengganti terminator default menggunakan opsi -t dan -r dengan nilai heksadesimal acak untuk menghindari konflik antara nilai terminator dan nilai data.

  • (Pengguna) Gunakan terminator panjang dan unik (urutan byte atau karakter apa pun) untuk meminimalkan kemungkinan konflik dengan nilai string sebenarnya. Ini dapat dilakukan dengan menggunakan -t opsi dan -r .

Contoh

Contoh di bagian ini menggunakan WideWorldImporters database sampel untuk SQL Server 2016 (13.x) dan versi yang lebih baru, Azure SQL Database, dan Azure SQL Managed Instance. WideWorldImporters dapat diunduh dari https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0. Lihat RESTORE Pernyataan untuk sintaks untuk memulihkan database sampel.

Contoh kondisi pengujian

Kecuali jika ditentukan sebaliknya, contoh mengasumsikan bahwa Anda menggunakan Autentikasi Windows dan memiliki koneksi tepercaya ke instans server tempat Anda menjalankan perintah bcp . Direktori bernama D:\bcp digunakan dalam banyak contoh. Ganti <server_name> dan nilai tempat penampung lainnya dengan nilai untuk lingkungan Anda.

Skrip Transact-SQL berikut membuat salinan kosong tabel WideWorldImporters.Warehouse.StockItemTransactions lalu menambahkan batasan kunci primer:

USE WideWorldImporters;
GO

SET NOCOUNT ON;

IF NOT EXISTS (SELECT *
               FROM sys.tables
               WHERE name = 'Warehouse.StockItemTransactions_bcp')
    BEGIN
        SELECT *
        INTO WideWorldImporters.Warehouse.StockItemTransactions_bcp
        FROM WideWorldImporters.Warehouse.StockItemTransactions
        WHERE 1 = 2;

        ALTER TABLE Warehouse.StockItemTransactions_bcp
        ADD CONSTRAINT PK_Warehouse_StockItemTransactions_bcp
            PRIMARY KEY NONCLUSTERED (StockItemTransactionID ASC);
    END

Anda dapat memotong StockItemTransactions_bcp tabel sesuai kebutuhan:

TRUNCATE TABLE WideWorldImporters.Warehouse.StockItemTransactions_bcp;

A. Mengidentifikasi versi utilitas bcp

Pada command prompt, masukkan perintah berikut:

bcp -v

B. Menyalin baris tabel ke dalam file data (dengan koneksi tepercaya)

Contoh berikut mengilustrasikan opsi out pada tabel WideWorldImporters.Warehouse.StockItemTransactions.

  • Basic

    Contoh ini membuat file data bernama StockItemTransactions_character.bcp dan menyalin data tabel ke dalamnya menggunakan format karakter .

    Pada command prompt, masukkan perintah berikut:

    bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -T
    
  • Expanded

    Contoh ini membuat file data bernama StockItemTransactions_native.bcp dan menyalin data tabel ke dalamnya menggunakan format asli . Contohnya juga: menentukan jumlah maksimum kesalahan sintaksis, file kesalahan, dan file output.

    Pada command prompt, masukkan perintah berikut:

    bcp WideWorldImporters.Warehouse.StockItemTransactions OUT D:\bcp\StockItemTransactions_native.bcp -m 1 -n -e D:\bcp\Error_out.log -o D:\bcp\Output_out.log -S <server_name> -T
    

Tinjau Error_out.log dan Output_out.log. Error_out.log harus kosong. Bandingkan ukuran file antara StockItemTransactions_character.bcp dan StockItemTransactions_native.bcp.

C. Menyalin baris tabel ke dalam file data (dengan autentikasi mode campuran)

Contoh berikut mengilustrasikan opsi out pada tabel WideWorldImporters.Warehouse.StockItemTransactions. Contoh ini membuat file data bernama StockItemTransactions_character.bcp dan menyalin data tabel ke dalamnya menggunakan format karakter .

Contoh mengasumsikan bahwa Anda menggunakan autentikasi mode campuran, dan Anda harus menggunakan sakelar -U untuk menentukan ID masuk Anda. Selain itu, kecuali Anda menyambungkan ke instans default SQL Server di komputer lokal, gunakan sakelar -S untuk menentukan nama sistem dan, secara opsional, nama instans.

Pada prompt perintah, masukkan perintah berikut: (Sistem meminta kata sandi Anda.)

bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -U<login_id> -S<server_name\instance_name>

D. Menyalin data dari file ke tabel

Contoh berikut mengilustrasikan opsi in pada tabel WideWorldImporters.Warehouse.StockItemTransactions_bcp dengan menggunakan file yang dibuat sebelumnya.

  • Basic

    Contoh ini menggunakan file data yang StockItemTransactions_character.bcp dibuat sebelumnya.

    Pada command prompt, masukkan perintah berikut:

    bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_character.bcp -c -T
    
  • Expanded

    Contoh ini menggunakan file data yang StockItemTransactions_native.bcp dibuat sebelumnya. Contoh ini juga menggunakan TABLOCK petunjuk, dan menentukan ukuran batch, jumlah maksimum kesalahan sintaks, file kesalahan, dan file output.

    Pada command prompt, masukkan perintah berikut:

    bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_native.bcp -b 5000 -h "TABLOCK" -m 1 -n -e D:\bcp\Error_in.log -o D:\bcp\Output_in.log -S <server_name> -T
    

    Tinjau Error_in.log dan Output_in.log.

E. Menyalin kolom tertentu ke dalam file data

Untuk menyalin kolom tertentu, Anda bisa menggunakan opsi .queryout Contoh berikut menyalin hanya kolom StockItemTransactionID dari tabel Warehouse.StockItemTransactions ke file data.

Pada command prompt, masukkan perintah berikut:

bcp "SELECT StockItemTransactionID FROM WideWorldImporters.Warehouse.StockItemTransactions WITH (NOLOCK)" queryout D:\bcp\StockItemTransactionID_c.bcp -c -T

F. Menyalin baris tertentu ke dalam file data

Untuk menyalin baris tertentu, Anda bisa menggunakan opsi .queryout Contoh berikut hanya menyalin baris untuk orang yang bernama Amy Trefl dari tabel WideWorldImporters.Application.People ke dalam berkas data Amy_Trefl_c.bcp.

Note

Saklar -d digunakan untuk mengidentifikasi basis data.

Pada command prompt, masukkan perintah berikut:

bcp "SELECT * from Application.People WHERE FullName = 'Amy Trefl'" queryout D:\bcp\Amy_Trefl_c.bcp -d WideWorldImporters -c -T

G. Menyalin data dari kueri ke file data

Untuk menyalin tataan hasil dari pernyataan Transact-SQL ke file data, gunakan queryout opsi . Contoh berikut menyalin nama dari WideWorldImporters.Application.People tabel, diurutkan berdasarkan nama lengkap, ke People.txt dalam file data.

Note

Pengalih -t digunakan untuk membuat file yang dibatasi koma.

Pada command prompt, masukkan perintah berikut:

bcp "SELECT FullName, PreferredName FROM WideWorldImporters.Application.People ORDER BY FullName" queryout D:\bcp\People.txt -t, -c -T

H. Membuat format file

Contoh berikut membuat tiga file format berbeda untuk Warehouse.StockItemTransactions tabel dalam WideWorldImporters database. Tinjau konten setiap file yang dibuat.

Pada prompt perintah, masukkan perintah berikut:

REM non-XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.fmt -c -T

REM non-XML native format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_n.fmt -n -T

REM XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.xml -x -c -T

Note

Pengalih -x hanya didukung di Windows.

Untuk informasi selengkapnya, lihat Menggunakan file format non-XML (SQL Server) dan file format XML (SQL Server).

I. Menggunakan file format untuk mengimpor secara massal dengan bcp

Untuk menggunakan file format yang dibuat sebelumnya saat mengimpor data ke instans SQL Server, gunakan opsi -f dengan sakelar in. Misalnya, perintah berikut menyalin secara massal konten file data, StockItemTransactions_character.bcp, ke dalam salinan Warehouse.StockItemTransactions_bcp tabel dengan menggunakan file format yang dibuat sebelumnya, StockItemTransactions_c.xml.

Note

Sakelar -L digunakan untuk hanya mengimpor 100 entri pertama.

Pada command prompt, masukkan perintah berikut:

bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp in D:\bcp\StockItemTransactions_character.bcp -L 100 -f D:\bcp\StockItemTransactions_c.xml -T

Note

File format berguna ketika bidang file data berbeda dari kolom tabel; misalnya, dalam jumlah, urutan, atau jenis datanya. Untuk informasi selengkapnya, lihat Memformat file untuk mengimpor atau mengekspor data (SQL Server).

j. Tentukan halaman kode

Contoh kode parsial berikut menunjukkan impor bcp dengan menentukan halaman kode 65001.

bcp MyTable in "D:\data.csv" -T -c -C 65001 -t , ...

K. Contoh file keluaran menggunakan pemisah kolom dan baris kustom

Contoh ini menunjukkan dua file sampel, yang dihasilkan oleh bcp menggunakan terminator bidang dan baris kustom.

  1. Buat tabel dbo.T1 di tempdb database, dengan dua kolom, ID dan Name.

    USE tempdb;
    GO
    
    CREATE TABLE dbo.T1
    (
        ID INT,
        [Name] NVARCHAR (20)
    );
    GO
    
    INSERT INTO dbo.T1 VALUES (1, N'Natalia');
    INSERT INTO dbo.T1 VALUES (2, N'Mark');
    INSERT INTO dbo.T1 VALUES (3, N'Randolph');
    GO
    
  2. Buat file output dari tabel contoh dbo.T1, menggunakan pemisah bidang kustom.

    Dalam contoh ini, -t , menentukan pengakhiran bidang khusus. Ganti <server_name> dengan nilai untuk lingkungan Anda.

    bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t ,
    

    Berikut kumpulan hasilnya.

    1,Natalia
    2,Mark
    3,Randolph
    
  3. Buat file output dari tabel dbo.T1 contoh, menggunakan penanda bidang kustom dan penanda baris kustom.

    Dalam contoh ini, -t , menentukan terminator bidang kustom, dan -r : menentukan terminator baris kustom. Ganti <server_name> dengan nilai untuk lingkungan Anda.

    bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t , -r :
    

    Berikut kumpulan hasilnya.

    1,Natalia:2,Mark:3,Randolph:
    

    Note

    Penanda akhir baris selalu ditambahkan, termasuk pada catatan terakhir. Namun, penanda akhir tidak ditambahkan pada bidang terakhir.

Contoh tambahan

Artikel berikut berisi contoh penggunaan bcp:

Dapatkan bantuan

Berkontribusi pada dokumentasi SQL

Tahukah Anda bahwa Anda dapat mengedit konten SQL sendiri? Jika Anda melakukannya, Anda tidak hanya membantu meningkatkan dokumentasi kami, tetapi Anda juga dikreditkan sebagai kontributor ke halaman.

Untuk informasi selengkapnya, lihat Mengedit dokumentasi Microsoft Learn.