Ada dua pendekatan berbeda yang dapat Anda lakukan.
Yang pertama adalah seperti yang diuraikan user569711 dan menggunakan ForEach Enumerator dan memanggil prosedur tersimpan yang ada. Keuntungannya adalah perilaku Anda harus persis seperti yang Anda alami saat ini dan pengujian Anda hanya perlu fokus untuk memastikan paket SSIS mengambil file yang tepat.
Yang kedua adalah menggunakan kemampuan luar biasa dari SSIS untuk menangani pengimporan jenis BLOB.
Alur Kontrol
Anda akan menginginkan 1 hingga 2 variabel ditentukan tergantung pada pendekatan Anda. Keduanya akan menjadi tipe data string. Saya membuat SourceFolder
dan CurrentFileName
. Yang pertama menentukan dari mana file akan berasal dan digunakan dalam kedua pendekatan. Yang terakhir digunakan dalam ForEach Loop Container untuk menangkap file "saat ini".
Alur Data
Untuk membuat aliran data berfungsi, Anda perlu mendapatkan daftar nama file yang sepenuhnya memenuhi syarat yang ditambahkan ke dalam pipa. Cara termudah adalah dengan menggunakan Transformasi Skrip, bertindak sebagai sumber dan menambahkan semua file yang memenuhi kondisi Anda (*.xml).
Foreach Loop Container
Konfigurasi seperti itu
Koleksi
Pemetaan Variabel
Jalankan Tugas SQL
Konfigurasikan demikian
Sumber Skrip
Tugas ini akan menambahkan file yang tersedia ke dalam aliran data. Catatan kecil, ini akan melintasi subfolder yang berbeda dari cara kita mengkonfigurasi Foreach. Ini adalah perubahan sederhana pada parameter ketiga (atau penghilangan) untuk menjadikannya level teratas saja.
Identifikasi variabel Anda sehingga tersedia di tugas skrip
Tambahkan kolom output yang sesuai. Panjang Anda dapat bervariasi berdasarkan lingkungan Anda.
Skrip di sini
using System;
using System.Data;
using System.IO;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
public override void CreateNewOutputRows()
{
string fileMask = string.Empty;
string sourceFolder = string.Empty;
fileMask = @"*.xml";
sourceFolder = this.Variables.SourceFolder;
foreach (string fileName in Directory.GetFiles(sourceFolder, fileMask, SearchOption.AllDirectories))
{
Output0Buffer.AddRow();
Output0Buffer.FileName = fileName;
Output0Buffer.SourceName = "Dataflow";
}
}
}
Impor Transformasi Kolom
Konfigurasi seperti ini
Catat IDnya di sini
Ikat ID itu kembali ke kolom dengan nama
Tujuan OLE DB
Konfigurasi. Tidak mendukung opsi Fast Load.
Referensi
Pos yang bagus tentang menggunakan Impor Transformasi Kolom