Saya mendapatkan kesalahan konversi ketika saya mencoba mengimpor file teks ke database saya. Di bawah ini adalah pesan kesalahan yang saya terima:
Kesalahan konversi data beban massal (ketidakcocokan tipe atau karakter yang tidak valid untuk codepage yang ditentukan) untuk baris 1, kolom 4 (Tahun).
Berikut adalah kode kueri saya:
CREATE TABLE Students
(
StudentNo Integer NOT NULL Primary Key,
FirstName VARCHAR(40) NOT NULL,
LastName VARCHAR(40) NOT NULL,
Year Integer,
GPA Float NULL
);
Berikut adalah contoh data dari file teks:
100,Christoph,Van Gerwen,2011
101,Anar,Cooke,2011
102,Douglis,Rudinow,2008
Saya rasa saya tahu apa masalahnya..Di bawah ini adalah kode insert massal saya:
use xta9354
bulk insert xta9354.dbo.Students
from 'd:\userdata\xta9_Students.txt'
with (fieldterminator = ',',rowterminator = '\n')
Dengan data contoh, tidak ada ',' setelah atribut Year meskipun masih ada atribut lain Grade setelah Year yang NULL
Bisakah seseorang memberitahu saya bagaimana cara memperbaikinya?
Coba gunakan format file karena file data Anda hanya memiliki 4 kolom. Jika tidak, cobalah OPENROWSET
atau gunakan tabel staging.
myTestFormatFiles.Fmt
mungkin terlihat seperti:
9.0 4 1 SQLINT 0 3 "," 1 StudentNo "" 2 SQLCHAR 0 100 "," 2 Nama Depan SQL_Latin1_Umum_CP1_CI_AS 3 SQLCHAR 0 100 "," 3 Nama Belakang SQL_Latin1_Umum_CP1_CI_AS 4 SQLINT 0 4 "\r\n" 4 Tahun "
(sumber: microsoft.com)
Tutorial ini tentang melewatkan kolom dengan BULK INSERT
juga dapat membantu.
Pernyataan Anda akan terlihat seperti:
USE xta9354
GO
BULK INSERT xta9354.dbo.Students
FROM 'd:\userdata\xta9_Students.txt'
WITH (FORMATFILE = 'C:\myTestFormatFiles.Fmt')
Dalam kasus saya, saya berurusan dengan file yang dihasilkan oleh hadoop pada kotak linux. Ketika saya mencoba mengimpor ke sql, saya mengalami masalah ini. Perbaikannya adalah dengan menggunakan nilai hex untuk 'line feed' 0x0a. Ini juga bekerja untuk insert massal
bulk insert table from 'file'
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '0x0a')
Opsi di atas juga berfungsi untuk file kueri besar Google. Saya mengekspor data tabel ke penyimpanan cloud goodle dan mengunduhnya dari sana. Saat memuat hal yang sama ke sql server, saya menghadapi masalah ini dan berhasil memuat file setelah menentukan pembatas baris sebagai
ROWTERMINATOR = '0x0a'
Perhatikan juga catatan header dan tentukan
FIRSTROW = 2
Blok terakhir saya untuk ekspor file data dari google bigquery terlihat seperti ini.
BULK INSERT TABLENAME
FROM 'C:\ETL\Data\BigQuery\In\FILENAME.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '0x0a',--Files are generated with this row terminator in Google Bigquery
TABLOCK
)