我已经创建了一个创建数据库备份的过程。我想返回一个输出参数,以便成功备份或出现一些错误。但我不知道如何从消息面板中捕获这些消息。
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。有没有其他方法这样做?请帮忙!
答案 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