1

これが私のsprocの簡略版です:

CREATE PROCEDURE usp_AddSomething
@i_input1 int,
@o_output1 int = 1 OUTPUT,
@o_output2 int = 2 OUTPUT
AS
-- Do stuff

@o_output1sproc に対して、またはsproc 内で値を明示的に設定しない場合@o_output2、デフォルトの出力値 1 と 2 が表示されると予想されますEXEC usp_AddSomething ...。通常の SQL スクリプトから呼び出すと、このように機能します。ただし、次のように SSIS SQL タスクで同じステートメントを実行すると、次のようになります。

EXEC ? = usp_AddSomething
@i_input1 = ?,
@o_output1 = ? OUTPUT,
@o_output2 = ? OUTPUT

デフォルトの 1 と 2 ではなく、一見ランダムな値 (例: 15305391 と 69085360) を取得します。

しかし、値が次のように sproc のどこかに明示的に設定されている場合:

...
SELECT @o_output1 = 1
SELECT @o_output2 = 2
RETURN 0

次に、SSIS で 1 と 2 の期待値を取得します。

私の SSIS 変数は Int32 です。SQL タスクのパラメーター マッピングは LONG を使用し、序数の位置 (0、1、2) はパラメーター名の下に正しく設定されています。

出力パラメータの値を冗長に初期化してデフォルトに一致させるのは簡単ですが、それが機能しない理由を知りたいです。多分別の風変わりな SSIS のものですか?SQL Server 2005 SP4。

4

1 に答える 1

0

何が起こっているかを確認する良い方法は、プロファイラーでトレースを開始し、ssis がデータベース エンジンに送信している t-sql を確認することです。次に、ssms から実行してみて、同じ結果が得られるかどうかを確認してください。

于 2012-08-16T18:06:51.050 に答える