Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana Memetakan Kolom Input dan Output secara dinamis di SSIS?

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membuat database secara terprogram di SQL Server

  2. Dapatkan ID Objek dari Namanya di SQL Server:OBJECT_ID()

  3. Memecahkan Masalah Kinerja CPU SQL Server

  4. Cari Tahu apakah Objek adalah Fungsi Bernilai Tabel di SQL Server dengan OBJECTPROPERTY()

  5. SQL Server 2016:Buat Tabel dari Skrip SQL