Bagikan melalui


Tentukan terminator kolom dan baris (SQL Server)

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

Untuk bidang data karakter, penghentian karakter opsional memungkinkan Anda menandai akhir setiap bidang dalam file data dengan pemutus bidang dan akhir setiap baris dengan pemutus baris. Mengakhiri karakter adalah salah satu cara untuk menunjukkan ke program yang membaca file data di mana satu bidang atau baris berakhir dan bidang atau baris lain dimulai.

Important

Saat Anda menggunakan format asli atau Unicode asli, gunakan prefiks panjang alih-alih terminator bidang. Data dalam format asli dapat berbenturan dengan penghenti karena file data dalam format asli disimpan dalam format data biner internal Microsoft SQL Server.

Karakter yang didukung sebagai terminator

Perintah bcp, pernyataan, dan penyedia rowset massal BULK INSERT mendukung berbagai karakter sebagai terminator field atau baris dan selalu mencari terminator pertama dari masing-masingnya. Tabel berikut mencantumkan karakter yang didukung untuk terminator.

Mengakhiri karakter Ditunjukkan oleh Description
Tab \t Ini adalah terminator bidang bawaan.
Karakter Newline \n Ini adalah pemisah baris default.
Pengembalian pengangkutan/umpan baris \r
Garis miring terbelakang 1 \
Terminator nol (terminator yang tidak terlihat) 2 \0
Setiap karakter yang dapat dicetak (karakter kontrol tidak dapat dicetak, kecuali null, tab, newline, dan carriage return) (*, A, t, l, dan sebagainya)
Rangkaian hingga 10 karakter yang dapat dicetak, termasuk beberapa atau semua terminator yang tercantum sebelumnya (**\t**, end, !!!!!!!!!!, \t-\n, dan sebagainya)

1 Hanya karakter t, n, r, 0, dan \0 yang bekerja dengan karakter escape garis miring terbalik, untuk menghasilkan karakter kontrol.

2 Meskipun karakter kontrol null (\0) tidak terlihat saat dicetak, ini adalah karakter yang berbeda dalam file data. Ini berarti bahwa menggunakan karakter kontrol null sebagai terminator bidang atau baris berbeda dengan tidak memiliki terminator bidang atau baris sama sekali.

Important

Jika karakter terminator muncul dalam data, karakter tersebut ditafsirkan sebagai terminator, bukan sebagai data, dan data setelah karakter tersebut ditafsirkan sebagai bagian dari kolom atau rekaman berikutnya. Oleh karena itu, pilih terminator Anda dengan hati-hati untuk memastikan bahwa mereka tidak pernah muncul dalam data Anda. Misalnya, terminator bidang pengganti rendah bukanlah pilihan yang baik untuk terminator bidang jika data berisi pengganti rendah tersebut.

Menggunakan terminator baris

Terminator baris dapat berupa karakter yang sama dengan terminator untuk kolom terakhir. Namun, umumnya, terminator baris yang berbeda berguna. Misalnya, untuk menghasilkan output tabular, hentikan bidang terakhir di setiap baris dengan karakter baris baru (\n) dan semua bidang lain dengan karakter tab (\t). Untuk menempatkan setiap rekaman data pada barisnya sendiri dalam file data, tentukan kombinasi \r\n sebagai terminator baris.

Note

Saat Anda menggunakan bcp secara interaktif dan menentukan \n (baris baru) sebagai terminator baris, bcp secara otomatis mengawalinya dengan karakter \r (pengembalian pengangkutan), yang menghasilkan terminator baris \r\n.

Tentukan terminator untuk ekspor massal

Saat Anda mengekspor data karakter atau nchar secara massal, dan ingin menggunakan terminator yang bukan standar, Anda harus menentukan terminator di perintah bcp. Anda dapat menentukan terminator dengan salah satu cara berikut:

  • Dengan file format yang menentukan terminator berdasarkan bidang demi bidang.

    Note

    Untuk informasi tentang cara menggunakan file format, lihat Memformat file untuk mengimpor atau mengekspor data (SQL Server).

  • Tanpa file format, alternatif berikut ada:

    • Gunakan sakelar -t untuk menentukan terminator bidang untuk semua bidang kecuali bidang terakhir di baris dan menggunakan sakelar -r untuk menentukan terminator baris.

    • Gunakan sakelar format karakter (-c atau -w) tanpa sakelar -t, yang mengatur pemutus bidang ke karakter tab, \t. Ini sama dengan menentukan -t\t.

      Note

      Jika Anda menentukan opsi -n (data asli) atau -N (asli Unicode), pemutus tidak disisipkan.

    • Jika perintah bcp interaktif berisi in atau out opsi tanpa sakelar file format (-f) atau sakelar format data (-n, -c, -w, atau -N), dan Anda memilih untuk tidak menentukan panjang awalan dan panjang bidang, perintah meminta terminator bidang setiap bidang, dengan nilai default tidak ada:

      Enter field terminator [none]:

      Umumnya, defaultnya adalah pilihan yang sesuai. Namun, untuk bidang data karakter atau nchar , lihat subbagian berikut, "Panduan untuk Menggunakan Terminator." Untuk contoh yang memperlihatkan perintah ini dalam konteks, lihat Menentukan format data kompatibilitas saat menggunakan bcp (SQL Server).

      Note

      Setelah Anda secara interaktif menentukan semua bidang dalam perintah bcp , perintah meminta Anda menyimpan respons untuk setiap bidang dalam file format non-XML. Untuk informasi selengkapnya tentang file format non-XML, lihat Menggunakan file format Non-XML (SQL Server).

Panduan untuk menggunakan terminator

Dalam beberapa situasi, penanda akhir berguna untuk bidang data jenis karakter atau nchar. Contohnya:

  • Untuk kolom data yang berisi nilai nol dalam file data yang akan diimpor ke dalam program yang tidak mengenal informasi tentang panjang awalan.

    Kolom data apa pun yang berisi nilai null dianggap sebagai panjang variabel. Dengan tidak adanya panjang awalan, terminator diperlukan untuk mengidentifikasi akhir bidang null, memastikan bahwa data ditafsirkan dengan benar.

  • Untuk kolom panjang tetap yang ruangnya hanya sebagian digunakan oleh banyak baris.

    Dalam situasi ini, menentukan terminator dapat menghemat ruang penyimpanan sehingga bidang dapat diperlakukan sebagai bidang dengan panjang variabel.

Tentukan \n sebagai terminator baris untuk ekspor massal

Saat Anda menentukan \n sebagai terminator baris untuk ekspor massal, atau secara implisit menggunakan terminator baris default, bcp menghasilkan kombinasi umpan baris kembali (CRLF) sebagai terminator baris. Jika Anda ingin menghasilkan karakter umpan baris saja (LF) sebagai terminator baris - seperti biasa pada komputer Unix dan Linux - gunakan notasi heksadesimal untuk menentukan terminator baris LF. Contohnya:

bcp -r '0x0A'

Examples

Contoh ini mengekspor data secara massal dari tabel AdventureWorks2022.HumanResources.Department ke file data Department-c-t.txt dengan format karakter, dengan koma sebagai pemisah bidang, dan karakter baris baru (\n) sebagai terminator baris.

Perintah bcp berisi sakelar berikut.

Switch Description
-c Menentukan bahwa bidang data dimuat sebagai data karakter.
-t , Menentukan koma (,) sebagai terminator bidang.
-r \n Menentukan terminator baris sebagai karakter baris baru. Ini adalah terminator baris default, jadi menentukannya opsional.
-T Menentukan bahwa utilitas bcp tersambung ke SQL Server dengan koneksi tepercaya menggunakan keamanan terintegrasi. Jika -T tidak ditentukan, Anda perlu menentukan -U dan -P untuk berhasil masuk.

Untuk informasi selengkapnya, lihat Utilitas bcp.

Pada prompt perintah Microsoft Windows masukkan:

bcp AdventureWorks2022.HumanResources.Department out C:\myDepartment-c-t.txt -c -t, -r \n -T

Ini membuat Department-c-t.txt, yang berisi 16 rekaman dengan masing-masing empat bidang. Bidang dipisahkan oleh koma.

Tentukan pemisah untuk impor massal

Saat Anda mengimpor data karakter atau nchar secara massal, perintah impor massal harus mengenali terminator yang digunakan dalam file data. Bagaimana terminator dapat ditentukan tergantung pada perintah impor massal, sebagai berikut:

  • bcp

    Menentukan terminator untuk operasi impor menggunakan sintaks yang sama seperti untuk operasi ekspor. Untuk informasi lebih lanjut, lihat Menentukan terminator untuk ekspor massal yang telah dibahas sebelumnya di artikel ini.

  • BULK INSERT

    Terminator dapat ditentukan untuk masing-masing bidang dalam file format, atau untuk seluruh file data, dengan menggunakan penentu yang ditampilkan dalam tabel berikut.

    Qualifier Description
    FIELDTERMINATOR = '<field_terminator>' Menentukan pemisah bidang yang akan digunakan untuk file data karakter dan karakter Unicode.

    Defaultnya adalah \t (karakter tab).
    ROWTERMINATOR = '<row_terminator>' Menentukan pengakhiran baris yang akan digunakan untuk file data karakter dan data karakter Unicode.

    Standarnya adalah \n (karakter baris baru).

    Untuk informasi selengkapnya, lihat BULK INSERT.

  • INSERT ... SELECT * FROM OPENROWSET(BULK...)

    OPENROWSET Untuk penyedia himpunan baris massal, terminator hanya dapat ditentukan dalam file format (yang diperlukan kecuali untuk jenis data objek besar). Jika file data karakter menggunakan terminator non-default, file tersebut harus ditentukan dalam file format. Untuk informasi selengkapnya, lihat Membuat File Format (SQL Server) dan Menggunakan File Format untuk Mengimpor Data Massal (SQL Server).

    Untuk informasi selengkapnya tentang OPENROWSET BULK klausa, lihat OPENROWSET (BULK).

Tentukan \n sebagai terminator baris untuk impor massal

Saat Anda menentukan \n sebagai terminator baris untuk impor massal, atau secara implisit menggunakan terminator baris default, bcp dan pernyataan BULK INSERT mengharapkan kombinasi carriage return-line feed (CRLF) sebagai terminator baris. Jika file sumber Anda hanya menggunakan karakter umpan baris (LF) sebagai terminator baris, seperti biasa dalam file yang dihasilkan pada komputer Unix dan Linux, gunakan notasi heksadesimal untuk menentukan terminator baris LF. Misalnya, dalam BULK INSERT pernyataan:

ROWTERMINATOR = '0x0A'

Examples

Contoh di bagian ini mengimpor data karakter secara massal dari file data yang Department-c-t.txt dibuat dalam contoh sebelumnya ke tabel myDepartment di database sampel AdventureWorks2025. Sebelum dapat menjalankan contoh, Anda harus membuat tabel ini. Untuk membuat tabel ini di dbo bawah skema, di Editor Kueri SQL Server Management Studio, jalankan kode berikut:

USE AdventureWorks2022;
GO

DROP TABLE myDepartment;

CREATE TABLE myDepartment
(
    DepartmentID SMALLINT,
    Name NVARCHAR (50),
    GroupName NVARCHAR (50) NULL,
    ModifiedDate DATETIME CONSTRAINT
        DF_AddressType_ModifiedDate DEFAULT (GETDATE()) NOT NULL
);
GO

A. Gunakan bcp untuk menentukan terminator secara interaktif

Contoh berikut mengimpor file data secara massal Department-c-t.txt menggunakan bcp perintah . Perintah ini menggunakan sakelar perintah yang sama dengan perintah ekspor massal. Untuk informasi lebih lanjut, lihat Menentukan terminator untuk ekspor massal yang telah dibahas sebelumnya di artikel ini.

Pada prompt perintah Windows, ketik perintah berikut:

bcp AdventureWorks2022.dbo.myDepartment in C:\myDepartment-c-t.txt -c -t , -r \n -T

B. Menggunakan BULK INSERT untuk menentukan terminator secara interaktif

Contoh berikut mengimpor Department-c-t.txt file data secara massal menggunakan BULK INSERT pernyataan yang menggunakan kualifikasi yang diperlihatkan dalam tabel berikut.

Option Attribute
DATAFILETYPE = 'char' Menentukan bahwa bidang data dimuat sebagai data karakter.
FIELDTERMINATOR = ',' Menentukan koma (,) sebagai pemutus bidang.
ROWTERMINATOR = '\n' Menentukan terminator baris sebagai karakter baris baru.

Di SQL Server Management Studio Editor Kueri, jalankan kode berikut:

USE AdventureWorks2022;
GO

BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'
WITH (
     DATAFILETYPE = 'char',
     FIELDTERMINATOR = ',',
     ROWTERMINATOR = '\n'
);
GO