2

フラット ファイル (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 番目のファイルの場合、これはソース ファイルでは想定されていません (これは発生しています)。これは、宛先テーブルでも行うべきではありません。

このエラー メッセージは、宛先テーブルがまだ最初のテーブル名を指しており、変更されていないことを示しています。

4

1 に答える 1

1

これらのファイルと宛先テーブルの構造が同一である場合、実行しようとしていることが機能します。そうしないと、最初のファイルがロードされますが、入力ファイルでメタデータが変更されると、プロセスは失敗します。

上記のパターンは、DTS では正常に機能しますが、SSIS では有効ではありません。

于 2012-06-12T14:03:02.210 に答える