none
SQLCMDについて RRS feed

  • 質問

  • 環境:SQLSERVER2005

     

    SQLCMDでストアドを実行し、パラメーターを取得するバッチを作成しました。

    ※ストアドを実行し終了コードをバッチ起動側へ返すイメージです

     

    パラメーターファイルをバッチファイルとマージしたいのですが、

    可能でしょうか?

     

    パラメーターファイルの最後にある終了コード”:EXIT(SELECT @OUT_RETURN_CODE)”

    がうまく処理できません。

     

    ◆バッチ(TEST.bat)

    sqlcmd -S SID -d DBNAME -U UID -P PW -i exec_SP.sql

     

    ◆パラメーターファイル(exec_SP.sql)

    DECLARE
      @OUT_RETURN_CODE int

    set @OUT_RETURN_CODE = 23

    EXECUTE testsp @OUT_RETURN_CODE OUTPUT

    :EXIT(SELECT @OUT_RETURN_CODE)

     

    ◆ストアド

    CREATE PROCEDURE [dbo].[testsp]
        @OUT_RETURN_CODE    INT = -1             OUTPUT
    AS
    BEGIN
     set @OUT_RETURN_CODE = @OUT_RETURN_CODE + '100'
    END


    よろしくお願いいたします。
    2008年3月20日 9:26

回答

  •  SQLCMDユーティリティのEXITは最後のSELECTクエリーではなく、クエリー全体に対して有効になるので、

    クエリー全体を囲む必要がありますので、以下のように記述してみてください。

    (見やすくするため改行していますが、バッチファイル内では改行できないため一行で記述してください)

     

    sqlcmd -S SID -d DBNAME -U UID -P PW -Q

    "EXIT(

    DECLARE
      @OUT_RETURN_CODE int

    set @OUT_RETURN_CODE = 23

    EXECUTE testsp @OUT_RETURN_CODE OUTPUT

    SELECT @OUT_RETURN_CODE

    )"

     

    試しに実行してみたところ、%ERRORLEVEL%に戻り値がセットされたので、大丈夫だと思われます。

     

    2008年3月21日 10:44

すべての返信

  •  SQLCMDユーティリティのEXITは最後のSELECTクエリーではなく、クエリー全体に対して有効になるので、

    クエリー全体を囲む必要がありますので、以下のように記述してみてください。

    (見やすくするため改行していますが、バッチファイル内では改行できないため一行で記述してください)

     

    sqlcmd -S SID -d DBNAME -U UID -P PW -Q

    "EXIT(

    DECLARE
      @OUT_RETURN_CODE int

    set @OUT_RETURN_CODE = 23

    EXECUTE testsp @OUT_RETURN_CODE OUTPUT

    SELECT @OUT_RETURN_CODE

    )"

     

    試しに実行してみたところ、%ERRORLEVEL%に戻り値がセットされたので、大丈夫だと思われます。

     

    2008年3月21日 10:44
  • 猫息子さん

     

    返信いただきました方法で成功しました。

     

    ファイルが減らせて、スッキリしました。

    ありがとうございました

    2008年3月21日 14:56