返回数据库备份查询结果的输出参数值

时间:2017-03-22 11:51:10

标签: sql-server output database-backups

我已经创建了一个创建数据库备份的过程。我想返回一个输出参数,以便成功备份或出现一些错误。但我不知道如何从消息面板中捕获这些消息。

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_'+@today_date+'.BAK'' ';

    EXEC (@sqlCommand);
END;

当我运行程序时,我收到消息

  

为数据库'TEMP'处理608页,在文件1上处理文件'TEMP'   为数据库'TEMP'处理了2个页面,在文件1上处理了'TEMP_log'文件   BACKUP DATABASE在0.458秒(10.405 MB /秒)内成功处理了610页。

我的问题是关于此消息我应该能够为输出参数@v_result返回1并且在出现任何错误时返回-1。有没有其他方法这样做?请帮忙!

2 个答案:

答案 0 :(得分: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_'+@today_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

答案 1 :(得分: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_'+@today_date+'.BAK'' ';

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

END;

根据@iSQLStmtRet变量的返回值,您可以打印出各种信息。

示例:

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