Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 返回数据库备份查询结果的输出参数值_Sql Server_Output_Database Backups - Fatal编程技术网

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

Sql server 返回数据库备份查询结果的输出参数值,sql-server,output,database-backups,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

我创建了一个创建数据库备份的过程。我想返回一个输出参数,用于成功备份或出现错误。但我不知道如何从消息面板捕捉此类消息

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;
当我运行该过程时,我会收到消息

已处理文件1上数据库“TEMP”和文件“TEMP”的608页。
已处理文件1上数据库“TEMP”和文件“TEMP_log”的2页。
备份数据库在0.458秒(10.405 MB/秒)内成功处理了610页


我的问题是关于这条消息,我应该能够为输出参数
@v_result
返回1,如果出现任何错误,则返回-1。还有别的方法吗?请帮忙

您可以像这样在存储过程中使用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

您可以将一个简单的变量添加到现有的结构中,该结构存储backup语句的返回值

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;
IF @iSQLStmtRet != 0
    BEGIN
        PRINT '-------------------------------------------------'
        PRINT ' Error during backup of ' + @nvDB2Backup + '!'
        PRINT ' Errocode: ' + cast(@iSQLStmtRet as nvarchar(20))
        PRINT '-------------------------------------------------'
    END