%errorlevel%を使用するとsqlcmdで直近に実行したSELECTの結果を取得することができる
なので、Batでストアドの戻り値を取得したい場合は
ストアドの戻り値をSELECT文で返すようBatファイルで記述すればよい
以下、使用例
呼び出し元Bat
::ストアドの実行 sqlcmd /U "hogeuser" /P "hogepass" /d "hogeDb" /S "hogeServer" /b /Q "EXIT( DECLARE @ret int; EXEC @ret = ProcTest; SELECT @ret )" if %errorlevel% NEQ 0 goto 9100 echo %errorlevel% echo "正常" goto END :9100 echo "エラー :END pause
ProcTest(呼び出し先ストアド)
CREATE PROCEDURE [dbo].[ProcTest] AS BEGIN --トランザクションの開始 BEGIN TRAN -- コミット処理 COMMIT TRAN RETURN (00) END --ALL END -------------------------------------------- -- エラー処理 -------------------------------------------- ERROR_RETURN: BEGIN -- ロールバックを行う ROLLBACK TRAN END
動作確認環境:Windows Server 2008,SQL Server 2008