Jika Anda membuat tabel serupa, Anda dapat menggunakannya dalam 2 pendekatan untuk memetakan kolom secara dinamis di dalam paket SSIS, atau Anda harus membangun seluruh paket secara terprogram. Dalam jawaban ini saya akan mencoba memberi Anda beberapa wawasan tentang cara melakukannya.
(1) Membuat perintah SQL Sumber dengan alias
Catatan:Pendekatan ini hanya akan berfungsi jika semua file .dbf memiliki jumlah kolom yang sama tetapi namanya berbeda
Dalam pendekatan ini Anda akan menghasilkan perintah SQL yang akan digunakan sebagai sumber berdasarkan FileID dan tabel Pemetaan yang Anda buat. Anda harus tahu adalah FileID dan .dbf File Path yang disimpan di dalam Variabel. sebagai contoh:
Dengan asumsi bahwa nama Tabel adalah inputoutputMapping
Tambahkan Execute SQL Task dengan perintah berikut:
DECLARE @strQuery as VARCHAR(4000)
SET @strQuery = 'SELECT '
SELECT @strQuery = @strQuery + '[' + InputColumn + '] as [' + OutputColumn + '],'
FROM inputoutputMapping
WHERE FileID = ?
SET @strQuery = SUBSTRING(@strQuery,1,LEN(@strQuery) - 1) + ' FROM ' + CAST(? as Varchar(500))
SELECT @strQuery
Dan pada Tab Parameter Mapping pilih variabel yang berisi FileID yang akan di Mapped ke parameter 0
dan variabel yang berisi nama file .dbf (alternatif dari nama tabel) dengan parameter 1
Setel jenis ResultSet ke Single Row
dan simpan ResultSet 0
di dalam variabel bertipe string sebagai contoh @[User::SourceQuery]
Nilai ResultSet akan menjadi sebagai berikut:
SELECT [CustCd] as [CustCode],[CNAME] as [CustName],[Address] as [CustAdd] FROM database1
Di OLEDB Source
pilih Mode Akses Tabel ke Perintah SQL dari Variabel dan gunakan @[User::SourceQuery]
variabel sebagai sumber.
(2) Menggunakan Komponen Skrip sebagai Sumber
Dalam pendekatan ini Anda harus menggunakan Komponen Skrip sebagai Sumber di dalam Tugas Aliran Data:
Pertama-tama, Anda harus meneruskan jalur file .dbf dan koneksi SQL Server ke komponen skrip melalui variabel jika Anda tidak ingin membuat kode keras.
Di dalam editor skrip, Anda harus menambahkan kolom keluaran untuk setiap kolom yang ditemukan di tabel tujuan dan memetakannya ke tujuan .
Di dalam Script, Anda harus membaca file .dbf menjadi datatable:
- C# Membaca dari file .DBF ke dalam tabel data
- Memuat DBF ke DataTable
Setelah memuat data ke dalam tabel data, isi juga tabel data lain dengan data yang ditemukan di MappingTable yang Anda buat di SQL Server.
Setelah itu, ulangi kolom yang dapat didata dan ubah .ColumnName
ke kolom output yang relevan, sebagai contoh:
foreach (DataColumn col in myTable.Columns)
{
col.ColumnName = MappingTable.AsEnumerable().Where(x => x.FileID = 1 && x.InputColumn = col.ColumnName).Select(y => y.OutputColumn).First();
}
Setelah mengulang setiap baris dalam datatable dan membuat baris keluaran skrip.
Selain itu, perhatikan bahwa saat menetapkan baris keluaran, Anda harus memeriksa apakah kolom tersebut ada, Anda dapat menambahkan semua nama kolom terlebih dahulu ke daftar string, lalu menggunakannya untuk memeriksa, sebagai contoh:
var columnNames = myTable.Columns.Cast<DataColumn>()
.Select(x => x.ColumnName)
.ToList();
foreach (DataColumn row in myTable.Rows){
if(columnNames.contains("CustCode"){
OutputBuffer0.CustCode = row("CustCode");
}else{
OutputBuffer0.CustCode_IsNull = True
}
//continue checking all other columns
}
Jika Anda memerlukan detail lebih lanjut tentang menggunakan Komponen Skrip sebagai sumber, periksa salah satu tautan berikut:
- Komponen Skrip SSIS sebagai Sumber
- Membuat Sumber dengan Komponen Skrip
- Komponen Skrip sebagai Sumber – SSIS
- SSIS – MENGGUNAKAN KOMPONEN SKRIP SEBAGAI SUMBER
(3) Membangun paket secara dinamis
Saya tidak berpikir ada metode lain yang dapat Anda gunakan untuk mencapai tujuan ini kecuali Anda memiliki pilihan untuk membangun paket secara dinamis, maka Anda harus menggunakan:
- BIML
- Model objek terkelola Layanan Integrasi
- Perpustakaan EzApi
(4) SchemaMapper:Pustaka kelas pemetaan skema C#
Baru-baru ini saya memulai proyek baru di Git-Hub, yang merupakan perpustakaan kelas yang dikembangkan menggunakan C#. Anda dapat menggunakannya untuk mengimpor data tabular dari excel, word , powerpoint, teks, csv, html, json dan xml ke tabel server SQL dengan definisi skema yang berbeda menggunakan pendekatan pemetaan skema. cek di:
- SchemaMapper:Pustaka kelas pemetaan skema C#
Anda dapat mengikuti halaman Wiki ini untuk panduan langkah demi langkah:
- Impor data dari beberapa file ke dalam satu tabel SQL panduan langkah demi langkah