実行できるアプローチは 2 つあります。
1 つ目は、user569711 が概説したとおりで、ForEach 列挙子を使用して、既存のストアド プロシージャを呼び出します。これの利点は、動作が現在経験しているものとまったく同じである必要があり、テストは SSIS パッケージが適切なファイルを取得していることを確認することだけに集中する必要があることです。
2 つ目は、SSIS のすぐに使える機能を使用して、BLOB 型のインポートを処理することです。
制御フロー
アプローチに応じて、1 ~ 2 個の変数を定義する必要があります。どちらも文字列データ型になります。 SourceFolder
を作成しました および CurrentFileName
.前者は、ファイルがどこから来るかを定義し、どちらのアプローチでも使用されます。後者は、ForEach ループ コンテナーで「現在の」ファイルを取得するために使用されます。
データフロー
データ フローを機能させるには、パイプラインに追加されたファイル名の完全修飾リストを取得する必要があります。最も簡単な方法は、ソースとして機能するスクリプト変換を使用し、条件 (*.xml) を満たすすべてのファイルを追加することです。
Foreach ループ コンテナー
そのように設定
コレクション
変数のマッピング
SQL タスクの実行
このように構成します
スクリプト ソース
このタスクは、使用可能なファイルをデータ フローに追加します。マイナーな注意として、これは Foreach の構成方法とは異なるサブフォルダーをトラバースします。 3 番目のパラメーターをトップ レベルのみにするための単純な変更 (または省略) です。
スクリプト タスクで使用できるように変数を特定します
適切な出力列を追加します。長さは環境によって異なる場合があります。
スクリプトはこちら
システムを使用する;System.Data を使用する;System.IO を使用する;Microsoft.SqlServer.Dts.Pipeline.Wrapper を使用する;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 (文字列 fileName in Directory.GetFiles(sourceFolder, fileMask, SearchOption.AllDirectories)) { Output0Buffer.AddRow(); Output0Buffer.FileName =ファイル名; Output0Buffer.SourceName ="データフロー"; }}}コード> プレ> インポート列変換
このように構成します
ここに ID を書き留めます
その ID を名前の列に結び付けます
OLE DB 宛先
構成、設定。 Fast Load オプションをサポートしていません。
参照
インポート列変換
の使用に関する素敵な投稿