フラット ファイル (114 ファイル) のセットがあり、各ファイルにはデータベース テーブル名が付けられています。私はデータベーススキーマを持っているので、私のデータベースはレコードがなくても準備ができています.
私がしなければならないことは、これらのフラット ファイルを処理し、それらのレコードをそれぞれのテーブルに挿入することだけです。
SSIS パッケージを作成しました。Ole DB の宛先に動的テーブル名を設定しようとしています。
変数を使用して動的テーブル名を設定しました。
これが私のパッケージです
スクリプト タスクで、変数の値を設定しています
public void Main()
{
// TODO: Add your code here
string _path = string.Empty;
if(Dts.Variables["FilePath"] != null)
_path = Dts.Variables["FilePath"].Value.ToString();
//MessageBox.Show(_path);
//Variables vars = default(Variables);
//Dts.VariableDispenser.LockForWrite("TableName");
//vars["TableName"].Value = _path.Replace(@"C:\Users\GD\", "").Replace(".txt", "");
Dts.Variables["TableName"].Value = _path.Replace(@"C:\Users\GD\","").Replace(".txt","");
MessageBox.Show(_path + Environment.NewLine +"TableName: " + Dts.Variables["TableName"].Value.ToString());
Dts.TaskResult = (int)ScriptResults.Success;
}
messageBox は期待されるデータを提供します。しかし、Ole DB Destination テーブルは、2 番目のループからのテーブル名を認識していません。
変数
Ole DB 宛先設定
エラーメッセージ:
[OLE DB Destination [55]] Error: Column "ActiveCompositionGenericID" cannot be found at the datasource.
"ActiveCompositionGenericID" これは最初の宛先テーブルと最初のソース ファイルの列です。
ループ内の 2 番目のファイルの場合、これはソース ファイルでは想定されていません (これは発生しています)。これは、宛先テーブルでも行うべきではありません。
このエラー メッセージは、宛先テーブルがまだ最初のテーブル名を指しており、変更されていないことを示しています。