1

私はこのようなシナリオを持っています:

@idストアドプロシージャに渡して、 @keySSISを使用してプロシージャからを取得する必要がありExecute SQL taskます。

create PROCEDURE lProcedurename
(@ID int ,
@key int  output
)
with execute as caller
as
set nocount on;
begin
BEGIN TRY
set @key=999
END TRY
begin catch
----some codes
end catch
end

SQL実行タスクのプロパティを見つけてください

単一行として設定された結果

私はすでにexecutesqlステートメント(ssis execute sqlタスクレベル)を次のように指定しました

exec lProcedurename  @ID = ? ,  @key = ?

パラメータマッピングとして

variablename ,direction, data type, parametername ,parameter size
user::id input long  o  -1
user::key output long 1 -1

結果セットとして

resultname,variablename
0   user::key

しかし、パッケージを実行するとエラーが発生します。プロパティ設定が正しいかどうか教えてください。


エラーをご覧ください

*SSISパッケージ「package1.dtsx」が開始しています。エラー:CMD Audit OnPreExecuteで0x0:このクエリの実行に関連付けられている結果行セットはありません。エラー:0xC002F309 at CMD Audit OnPreExecute、Execute SQL Task:変数 "key"に値を割り当てているときにエラーが発生しました: "Exception from HRESULT:0xC0015005"。タスクが失敗しました:CMD Audit OnPreExecute


同じパッケージをもう一度実行すると、別のエラーが表示されます。 SSISパッケージ「package1.dtsx」が起動しています。エラー:0xC001405Bイベントパッケージオンエラー:読み取りアクセスのために変数 "User::key"をロックしようとしたときにデッドロックが検出されました。16回試行した後、ロックを取得できず、タイムアウトしました。エラー:0xC00291EAイベントパッケージエラー時、SQLタスク:変数 "User::key"が存在しません。エラー:0xC0024107イベントパッケージオンエラー:タスクの検証中にエラーが発生しました。警告:0x80019002 at OnError:SSIS警告コードDTS_W_MAXIMUMERRORCOUNTREACHED。実行メソッドは成功しましたが、発生したエラーの数(5)が最大許容値(1)に達しました。失敗に終わります。これは、エラーの数がMaximumErrorCountで指定された数に達したときに発生します。MaximumErrorCountを変更するか、エラーを修正してください。エラー:テスト時の0x0:このクエリの実行に関連付けられている結果の行セットはありません。警告:0x80019002 at OnError:SSIS警告コードDTS_W_MAXIMUMERRORCOUNTREACHED。実行メソッドは成功しましたが、発生したエラーの数(5)が最大許容値(1)に達しました。失敗に終わります。これは、エラーの数がMaximumErrorCountで指定された数に達したときに発生します。MaximumErrorCountを変更するか、エラーを修正してください。*

user::key変数はすでに定義されていることに注意してください

4

2 に答える 2

4

私は同じ問題を抱えていました、そしてこのフォーラムは私にヒントを与えて、そして私はそれを動かしました。ストアドプロシージャでは、入力パラメータと出力パラメータを使用し、catchブロックでは、プロシージャが失敗したときに結果セットとして使用したいRETURN1を使用しました。別の手順ではそのように機能しましたが、そこでは出力を使用しませんでした。

私が以前にしたこと(パラメータマッピングで?1が入力で?2が出力):

EXEC procedure ?, ? OUTPUT

また、RETURNを使用した場合にも結果が得られることを期待していました(SSMS T-SQLでプロシージャを呼び出したときは問題ありませんでした)。しかし、結果はエラーでした。

私が変更したもの:

EXEC ? = procedure ?, ? OUTPUT

どこ ?1はRESULTの答えですか?2が入力され、?3が出力されます。それらすべてをパラメーターマッピングで使用し、ResultSetをnoneに設定しました。

于 2012-10-23T14:04:28.863 に答える
2

パラメータマッピングは問題ないはずです。結果セットを「なし」に設定し、結果セットのマッピングを削除する必要があります。変数に出力パラメーターをキャプチャし、それを結果セットに設定しようとしています。これに伴う問題は、ストアドプロシージャのSQLが結果を返さないことです。

于 2012-06-20T16:02:50.140 に答える