1

わかりました、私は簡単なプロセスを持っています...

  1. テーブルを読み取り、「StatusID」が1の行を取得します。単純です。

    PreorderStatusからProductIDを選択します。StatusID=1

  2. そのクエリから返されたForeach行で、アクションを実行します。簡単にするために、元のテーブルを変更して「StatusID」を2に設定しましょう。

    PreorderStatusを更新してStatusID=2に設定します。ここで、ProductID = @ProductID

SSISでこれを行うために、最初のステートメントを使用して単純な「SQL実行タスク」を作成しました。エディターで、完全な結果セットを返すように結果セットを設定し、 ReadySetという名前のオブジェクト変数を埋めるために結果名0を設定しました。

次に、出力はForEachLoopコンテナーにルーティングされます。列挙子はForeachADO列挙に設定され、オブジェクトソース変数は上からReadySet変数に設定されます。また、変数v_ProductIDをインデックス0にマップしました。

Foreachループの先頭にブレークポイントを設定すると、変数が正しく設定されていることがわかります。素晴らしい!!次に、ステップ2に進みます。

これで、新しいSQLタスクをforeachコンテナーに配置しました。今、私はヘッドスクラッチャーを持っています。SQLステートメントで実際に変数を使用するにはどうすればよいですか。「v___ProductID」または「User::v_ProductID」を使用するだけでは機能しないようです。パラメータのマッピングは良い考えのように見えましたが(@ProductIDとすべてを手に入れました!)、それもうまくいかなかったようです。

とてもシンプルなものが欠けているような気がしますが、何がわからないのです。助けてくれてありがとう!

4

2 に答える 2

1

もっと良いアプローチがあると思います。おおよその手順は次のとおりです。

  1. DataFlowタスクをデザイン画面にドラッグします。
  2. それを開き、OLEDBソースとOLEDBコマンドコンポーネントをデザインサーフェスに追加します。
  3. 説明したクエリを使用するようにソースを変更します。
  4. ソースをコマンドコンポーネントに接続します。
  5. コマンドコンポーネントを変更して、「Update PreorderStatus set StatusID = 2 where ProductID =?」を使用します。クエリとパラメータマッピングページで?データソースからの入力に対する変数。

HTH

于 2009-12-09T22:50:27.170 に答える
0

SQL実行タスクを使用し、変数に基づいて何かを変更したい場合は、ストアドプロシージャを使用して、変数をプロシージャの入力パラメータにします。

次に、SQL実行タスクでパラメーターを設定し、SQLステートメントを次のように設定します。

exec myproc ?
于 2009-12-09T22:24:50.840 に答える