実行できるアプローチは2つあります。
1つ目は、user569711の概要を示し、ForEach列挙子を使用して、既存のストアドプロシージャを呼び出します。これの利点は、動作が現在経験しているものとまったく同じである必要があり、テストはSSISパッケージが適切なファイルを取得していることを確認することにのみ焦点を当てる必要があることです。
2つ目は、SSISのすぐに使用できる機能を使用して、BLOBタイプのインポートを処理することです。
制御フロー
アプローチに応じて、1〜2個の変数を定義する必要があります。どちらも文字列データ型になります。作成SourceFolder
しましCurrentFileName
た。前者は、ファイルの出所を定義し、どちらのアプローチでも使用されます。後者は、「現在の」ファイルをキャプチャするためにForEachループコンテナで使用されます。
データフロー
データフローを機能させるには、パイプラインに追加されたファイル名の完全修飾リストを取得する必要があります。最も簡単な方法は、スクリプト変換を使用してソースとして機能し、条件(* .xml)を満たすすべてのファイルを追加することです。
Foreachループコンテナ
そのように構成する
コレクション
変数マッピング
SQLタスクの実行
このように構成します
スクリプトソース
このタスクは、利用可能なファイルをデータフローに追加します。マイナーな注意点として、これはForeachの構成方法とは異なるサブフォルダーをトラバースします。これは、3番目のパラメーター(または省略)を単純に変更して、トップレベルのみにすることです。
スクリプトタスクで使用できるように変数を特定します
適切な出力列を追加します。長さは環境によって異なる場合があります。
ここにスクリプト
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";
}
}
}
列変換のインポート
このように構成します
ここにIDをメモします
そのIDを名前の列に結び付けます
OLEDB変換先
構成、設定。高速ロードオプションをサポートしていません。
参照
インポート列変換の使用に関するすばらしい投稿