2009-03-03 2 views
1

これは私が一日中見た中で最も面白いものです。SSIS Execute SQL Task Outパラメータ-1が正しく表示されない

SSIS 2005では、2つのINパラメータと1つのOUTPUTパラメータを使用するSQL 2005ストアドプロシージャを実行するSQL実行タスクがあります。 INパラメータは静的なものなので、コマンド文字列にハードコードされています。 OUTPUTパラメータはInt32型のパッケージ変数に格納されます(ただし、パラメータマッピングページのSQL実行タスクではデータ型がLONGであることがわかります)。

私はSQLタスクを実行し、出力パラメータが値> 0(2のような)を返すとき、変数には2が設定されます。SQLタスクを実行し、出力パラメータが-1を返すとき、 66682316のような値が入力されています。私はSSMSでprocを実行できます。値に-1があらかじめ設定されている場合は、-1が返されます。

DECLARE @out int 

SET @out = -1 

EXECUTE MyProc 'param1', 'param2', @out OUTPUT 

SELECT @out -- returns -1 

-1の代わりにこの値が返される理由は何ですか?私の変数はUI32でなくInt32だと確信しています。

答えて

0

あなたが言っているでしょうか。

SELECT? = @Out

1

sqlコマンドを設定した場合は、パラメータではなく結果セットから変数を設定する必要があります。

結果を1行に設定し、結果セットタブで、結果名として0(OLEDBを使用している場合)を、変数名として変数(User :: OutputVariable)を変数名として入力します。

あなたはパラメータを使用する場合は、このようなあなたのSQLを設定します:次のように、あなたはパラメータマッピング]タブに移動し、あなたのパラメータを設定します

EXECUTE MyProc 'param1', 'param2', ? OUTPUT 


変数名を - >ユーザー:: OutputVariable
方向 - >出力
データ型 - >ロング
パラメータ名 - > 0
パラメータサイズ - > -1

注これは、一般タブの接続タイプとしてOLEDBを使用する場合に適用されます。パラメータの名前付け方法は、使用する接続タイプによって異なります。

関連する問題