質問

Iはすでに存在しているストアドプロシージャを使用して挿入されなければならないデータを移行しています。ストアドプロシージャは、挿入された行のIDのパラメータ及び(SELECT文から)の戻り値を有しています。 SSISでOLE DBコマンド内で、Iは、パラメータとして列の値を渡すストアドプロシージャを呼び出すことができると私は、通常、「ID」の出力を処理するために、ストアドプロシージャに出力パラメータを使用します。私は手順はid値を返すために選択を使用する場合、これは戻り値で扱うことができるかわかりませんよ。ここで働く前に、私が使用しているものの一例ではあるが、私は選択から返された値をピックアップする必要があります:

exec dbo.uspInsertContactAddress
@Address = ?,
@ContactID = ?,
@DeliveryMethodId = ?,
@ID = ? output,
@Version = ? output
役に立ちましたか?

解決

私は実際には非常に単純であったこの操作を行うことができた道ます:

exec ? = dbo.StoredProc @param = ?, @param2 = ?

、その後@RETURN_VALUE利用可能なデスティネーション列に表示されます。

他のヒント

SqlCommandオブジェクトのプロパティでは、変数名、ちょうど疑問符と出力パラメータのための「OUT」または「OUTPUT」のラベルを使用しないでください。

出力パラメータ値を取得するためのトリックは、プロシージャの結果をキャプチャする(SSIS変数にマッピングされた)カラムを導入するために先にOLE DBコマンドのパイプラインに誘導された列変換を置くことである。

OLEDBコマンド変換とID列がためを参照してください。これを行う方法のスクリーンキャップとの良好な概観。また、最初のリンクで使用されるゴミ箱先のゴミ箱先アダプタを参照してください。それはこのようなものをデバッグするために利用できる持っている便利なツールです。

ストアドプロシージャが結果セットを返す場合、あなたはそれをキャプチャする必要があります。

DECLARE @results TABLE (
    [ID] INT NOT NULL
)

INSERT @results ([ID])
EXEC dbo.uspInsertContactAddress @Address = ?, @ContactID = ?, @DeliveryMethodId = ?, @ID = ? output, @Version = ? output

SELECT * FROM @results 

注:私は、テーブル変数を使用していました。あなたは、SQL Serverのバージョンに応じて、一時テーブルを使用する必要があります。

私はいつも多くの成功してSQL実行タスク内のパラメータマッピングを使用していました。 SQL文は、「EXEC nameofstoredproc?、?OUTPUT」で、パラメータが出力されると疑問符をパラメータとOUTPUTの場所を指定して。

あなたが適切な変数名、方向(入力、出力、戻り値)とデータ型のマッピングのパラメータを指定します。あなたのストアドプロシージャが結果セットを介して必要なデータを返しているので、その後、戻り値としてIDとバージョンを収集するための変数の方向を指定します。それはあなたのためにうまく動作するはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top