1

スクリプトとforeachコンテナを使用していくつかのテーブルを更新するSSISパッケージがあります。foreachコンテナの前に、スクリプトタスクでこのクエリを使用SqlConnectionして呼び出しています。SqlCommand

SELECT TOP 10 DirectoryID, DirectoryPath FROM ProjectDirectory ORDER BY LastAudit

SqlDataReaderそして、それらを多次元配列に追加するために使用しています[10,2]。配列をオブジェクト変数に割り当ててDirectoryList、foreachループコンテナーで配列を反復処理できるようにします。{{"1"、 "C:\ Folder1"}、{"2"、 "C:\ Folder2"}、...}のようになります。

問題は、私が数日前にこのソフトウェアを使い始めたばかりで、foreachループコンテナーがDirectoryList変数をどのようにループするかについて混乱していることです。現時点では、コンテナーの[収集]タブで、[列挙子]を[変数列挙子からForeach]に設定し、変数を。として設定していUser::DirectoryListます。変数User::DirectoryIDをインデックス0にUser::DirectoryPath設定し、インデックス1に設定しています。配列の最上位レベルだけをループさせようとしているので、各ループでID変数とパス変数が「1」と「」に割り当てられます。 C:\ Folder1、次にループを通過するときに、「2」や「C:\ Folder2」などに割り当てられます。パスを使用して情報を検索するスクリプトコンポーネントがあり、 SQLテーブルの正しい行を更新するためのID。

MessageBox.Show(Variables.DirectoryID + ", " + Variables.DirectoryPath)デバッグするために、最初の反復のIDとパスを表示し、「8、8」を表示しています。8は、最初に表示される行のIDに対応します。次に実行すると、正しいパス「C:\ Folder1、C:\Folder1」が2回表示されます。したがって、明らかに変数マッピングは機能しておらず、両方の変数を同じインデックスにマッピングしています。いずれにせよ、それは機能していないので、Foreach From Variable Enumeratorは私が選択すべきものではないか、foreachコンテナーで多次元配列を使用できないと考えています。検索して何も見つかりませんでした。これはすべて理解するのが難しいかもしれませんが、何か提案はありますか?

4

1 に答える 1

2

わかりました、あなたは実際にそのようにする必要はありません。ソースはt-sqlクエリであるため、「executesqltask」を使用して実行できます。しかし、それは問題ありません。この方法でも実行できます。私は現在、DirectoryListの場合と同様に、スクリプトタスクのデータテーブルに結果セットを取得してオブジェクト変数にロードするパッケージに取り組んでいます。

値を読み取るには、次のようにループを構成します。ここで、変数はObject変数です。

ここに画像の説明を入力してください

[マッピング]タブでは、次のようになります。ここで、変数は、最初の列(インデックス0)の値を配置するパッケージ変数です。結果セットの列と同じ数のインデックスを設定できます。

ここに画像の説明を入力してください

これで、ループ内で現在の値を使用して変数にアクセスできるようになります。

于 2012-05-24T15:34:57.420 に答える