Saya memiliki file teks yang dibuat dengan membuang 8 tabel SQL ke dalamnya. Sekarang saya perlu mengimpor data ini kembali ke SQL Server.

Menggunakan insert BULK saya dapat memuat data ke dalam satu tabel dengan kolom tunggal 'FileData'.

DECLARE @FileTable TABLE (FileData NVARCHAR(MAX))

INSERT INTO @FileTable
SELECT BulkColumn 
FROM OPENROWSET( BULK N'C:\My\Path\Name\FileName.txt', SINGLE_CLOB) AS Contents

SELECT * FROM @FileTable

Jadi sekarang saya memiliki string besar yang perlu saya atur ke dalam tabel yang berbeda.

Misalnya bagian string ini sesuai dengan tabel di bawah ini:

FileData
00001                 00000009716496000000000331001700000115200000000000  

Meja:

enter image description here

Sepertinya semua bidang memiliki panjang yang ditentukan dan saya bisa mendapatkan panjang itu.

Saya dapat melihat melakukan sesuatu seperti ini:

select SUBSTRING('00001                 00000009716496000000000331001700000115200000000000   ', 1,5) as RecordKey
select SUBSTRING('00001                 00000009716496000000000331001700000115200000000000   ', 6,17) as Filler
select SUBSTRING('00001                 00000009716496000000000331001700000115200000000000   ', 23,16) as BundleAnnualPremium

enter image description here

Tetapi apakah ada cara yang lebih cepat dan lebih baik untuk memuat data ini ke dalam tabel yang berbeda?

0
Serdia 10 Juli 2020, 21:20

1 menjawab

Jawaban Terbaik

Anda bisa menyisipkan massal dengan file formatlangsung dari awal. Tetapi karena data sudah dimuat ke dalam tabel besar, jika Anda lebih suka menggunakan TSQL murni, Anda dapat menarik elemen dari string menggunakan left(), right(), dan substring().

1
allmhuran 10 Juli 2020, 18:43