none
ストアドとxp_cmdshellについて RRS feed

  • 質問

  • CREATE PROCEDURE [dbo].[EXCELOUT_INSPECTION_REZULT]
    AS
    DECLARE @command VARCHAR(200)
    DECLARE @RET int
    BEGIN TRY
       
     SET @command = 'C:\Debug\ExcelOutPut.exe'

     EXEC @RET = master.dbo.xp_cmdshell @command
     IF @RET <> 0
       BEGIN
      RETURN 1
       END
     ELSE
       RETURN(0)

    END TRY

     -- 例外処理
    BEGIN CATCH
       RETURN ERROR_NUMBER()
    END CATCH

    EXEファイルの処理が成功したかどうかの戻り値を取得しており、正常に取得できております

    そこでご教示頂きたいのは、『xp_cmdshel』で呼び出したプログラムって、処理が終わるまでストアドは待機しているのでしょうか?

    そもそも、基本的に戻り値を取得出来るプログラム(上記の質問に限らず)の場合は、必ず待機しているのでしょうか?

    また、同期、非同期は皆様はどのように判断されているのでしょうか?

    検索しようにも知りたい内容を見つける事が出来ず質問させて頂きました

    宜しくお願い申し上げます。

    2014年7月28日 6:03

回答

  • xp_cmdshell (Transact-SQL)

    xp_cmdshell は、同期して動作します。 制御は、コマンド シェルのコマンドが完了するまで呼び出し元に返されません。

    とドキュメントにはっきり書かれていますが……。

    基本的に戻り値を取得出来るプログラム(上記の質問に限らず)の場合は、必ず待機しているのでしょうか?

    そりゃ、プロセスが終了しなければ正しい戻り値は取得できませんからね。

    同期、非同期は皆様はどのように判断されているのでしょうか?

    普通はドキュメントに書かれてるんじゃないでしょうか。まあ、たとえばLog関数の解説にはわざわざ書かないでしょうけども。

    • 回答としてマーク kong0214 2014年7月29日 2:19
    2014年7月28日 6:18