none
SSIS 呼び出したプロシージャの戻り値をユーザ定義パッケージ変数に受け取りたい。 RRS feed

  • 質問

  • 簡単な質問で申し訳ないのですが、お答えいただけるとありがたいです。

    やりたいこと

     パッケージから戻り値があるプロシージャを呼び出して、パッケージ変数に格納したい。

    問題点

     EXEC ? = PR_ReturnTest

    SQL実行タスクに直接上記プロシージャを呼ぶコードを書いた所、下記のコンパイルエラーが出ました。

     「クエリで解析に失敗しました。コンパイルエラーが発生したため、バッチを解析できませんでした。」

    どのように記入すれば戻り値を格納できるのでしょうか?

    ※プロシージャ

    CREATE PROCEDURE PR_ReturnTest

    AS

    BEGIN
     RETURN 5
    END

    ※全般

    Connection : OLE DB

    SQLSourceType : 直接入力

    SQLStatement : EXEC ? = PR_ReturnTest

    BypassPrepare : False

    ResultSet : なし

    ※パラメータマッピング

    変数名 User::T_ReturnCode

    方向 ReturnValue

    データ型 LONG

    パラメータ名 0

    パラメータ 0

    2019年9月13日 6:19

回答

すべての返信

  • 以下のように書けば良いですが、書ける場所でしょうか?
    変数は@で始まり、それを宣言(定義)しなければなりません。

    declare @para int;

    exec @para = PR_ReturnTest;

    #「;」はあっても無くても良いです。


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答としてマーク tishi3228 2019年9月18日 3:53
    2019年9月13日 7:00
  • 返答ありがとうございます。

    DECLARE @Return int
    EXEC @Return = PR_ReturnTest

    こちらでSQLタスク内の変数に戻り値が来たのですが、ここからパッケージ変数に値を受け渡すにはどうしたらいいのでしょうか?

    パッケージ変数  User::T_ReturnCode この子に値を渡したいのですがSQLタスク内で

    @User::T_ReturnCodeと書いても

    「クエリで解析に失敗しました。スカラー変数 "@User" を宣言してください。」

    とエラーが出てしまい参照もできない状態です。

    理解が足りず申し訳ないです。

    2019年9月13日 8:21
  • SSISには詳しくないので検索しただけで申し訳ないですが、以下の情報が役に立つかもしれません。

    SSIS and Stored Procedure OUTPUT Parameters
    http://www.sqlsafety.com/?p=649

    How to Execute Stored Procedure in SSIS Execute SQL Task in SSIS
    https://mindmajix.com/ssis/how-to-execute-stored-procedure-in-ssis-execute-sql-task


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答としてマーク tishi3228 2019年9月17日 2:53
    2019年9月13日 9:25
  • 返信が休み明けとなってしまい、申し訳ございません。

    検索して頂いてありがとうございます!

    検索して頂いたソースなどには ’?’ 書いてあるのですが、やはりまだコンパイルエラーが出てしまいます。

    一旦別の方法で戻り値を格納できたので、回答済みにさせて頂きます。

    回避方法・ エディター内で直接パッケージ変数にアクセスできないので、戻り値を単一行として受け取る形に変更。

    [変更前]

    SQL実行タスクエディター

      ※全般タブ

    • Connection : OLE DB
    • SQLSourceType : 直接入力
    • SQLStatement : EXEC ? = PR_ReturnTest
    • BypassPrepare : False
    • ResultSet : なし

      ※パラメータマッピングタブ

    • 変数名 : User::T_ReturnCode
    • 方向 : ReturnValue
    • データ型 : LONG
    • パラメータ名 : 0
    • パラメータ : 0

      ※結果セットタブ 

    • 設定なし

    ※プロシージャ

    CREATE PROCEDURE PR_ReturnTest

    AS

    BEGIN
     RETURN 5
    END

    [変更後]

    SQL実行タスクエディター

      ※全般タブ

    • Connection : OLE DB
    • SQLSourceType : 直接入力
    • SQLStatement : EXEC PR_ReturnTest
    • BypassPrepare : False
    • ResultSet : 単一行

      ※パラメータマッピングタブ

    • 設定なし

      ※結果セットタブ 

    • 結果名 : 0
    • 変数名 : User::T_ReturnCode

    ※プロシージャ

    CREATE PROCEDURE PR_ReturnTest

    AS

    BEGIN
     SELECT 5
    END

        

    2019年9月17日 2:52
  • 解決致しました!

    書き方は間違っていなかったみたいです。

    SQL実行タスクエディター内でコンパイルエラーが出ていたのですが、

    パッケージを動かした所ちゃんと変数に格納され正常に動きました。

    始めたばかりであまり分かっておらず、お騒がせして申し訳ございませんでした。

    2019年9月18日 1:43