2017-03-22 6 views
0

データベースバックアップを作成する手順を作成しました。バックアップが成功したか、何らかのエラーが発生した場合の出力パラメータを返したい。しかし、私はメッセージパネルからそのようなメッセージをどのように捉えるのか分かりません。データベースのデータベースバックアップクエリ結果の出力パラメータ値を返します

私は手順を実行すると、私は、ファイルにデータベースの

加工608ページ 'TEMP'、ファイル 'TEMP' のメッセージを取得

CREATE PROCEDURE [DBO].[P_DB_BACKUP] 
    (@v_result int = 0 output) 
AS 
    DECLARE @today_date VARCHAR(10) = convert(VARCHAR(10), getdate(), 120); 
    DECLARE @sqlCommand VARCHAR(1000) 
BEGIN 
    SET @sqlCommand = 'backup database TEMP to disk =''D:TEMP_BCK_'[email protected]_date+'.BAK'' '; 

    EXEC (@sqlCommand); 
END; 

1.
加工2ページ 'TEMP' 、ファイル 'TEMP_log'をファイル1にコピーします。
BACKUP DATABASEは、610ページを0.458秒(10.405 MB /秒)で正常に処理しました。

私の質問は、私はすべてのエラーが発生した場合には、出力パラメータ@v_resultと-1のための1を返すことができる必要があり、このメッセージです。これを行う他の方法はありますか?助けてください!

答えて

0

あなたはこのようなあなたのストアドプロシージャでのtry-catchを使用することができます -

CREATE PROCEDURE [DBO].[P_DB_BACKUP] 
(
    @v_result int = 0 output 
) 
AS 
BEGIN 

    DECLARE @today_date VARCHAR(10) = convert(VARCHAR(10), getdate(), 120); 
    DECLARE @sqlCommand VARCHAR(1000) 

    BEGIN TRY 

     SET @sqlCommand = 'backup database TEMP to disk =''D:TEMP_BCK_'[email protected]_date+'.BAK'' '; 
     EXEC (@sqlCommand); 
     SET @v_result = 1; 

    END TRY 
    BEGIN CATCH 

     SET @v_result = -1; 
     RAISERROR('YOUR ERROR MESSAGE', 16, 1); 

    END CATCH 

END 
0

バックアップ文の戻り値を格納する既存の建設に単純な変数を追加することができます。

CREATE PROCEDURE [DBO].[P_DB_BACKUP] 
    (@v_result int = 0 output) 
AS 
    DECLARE @today_date VARCHAR(10) = convert(VARCHAR(10), getdate(), 120); 
    DECLARE @sqlCommand VARCHAR(1000) 
    DECLARE @iSQLStmtRet  AS INT    = 0 -- <== new!! 
BEGIN 
    SET @sqlCommand = 'backup database TEMP to disk =''D:TEMP_BCK_'[email protected]_date+'.BAK'' '; 

    EXEC @iSQLStmtRet = sp_executesql @sqlCommand; -- <== modified 

END; 

@iSQLStmtRetの戻り値に応じて、さまざまな情報をPRINTすることができます。

例:

IF @iSQLStmtRet != 0 
    BEGIN 
     PRINT '-------------------------------------------------' 
     PRINT ' Error during backup of ' + @nvDB2Backup + '!' 
     PRINT ' Errocode: ' + cast(@iSQLStmtRet as nvarchar(20)) 
     PRINT '-------------------------------------------------' 
    END 
関連する問題