SQL Server -- SQLserver 存储过程执行错误记录到表
2016-10-09 15:38
381 查看
SQLserver 存储过程执行错误记录到表
From: http://blog.csdn.net/leshami/article/details/51333650
对于在执行存储过程中碰到的一些错误,如果未及时捕获或者说传递给前端应用程序来,在这样的情形下,故障的排查显得尤为困难。基于此,我们可以可以将这些错误信息记录到日志,同时也可以将其传递给前端应用程序。
如本文的示例。
一、将错误信息记录到表
CREATE TABLE ErrorLog
(
ID INT IDENTITY (1,1) NOT NULL,
ErrorNumber INT,
ErrorMessage VARCHAR(1000),
ErrorSeverity INT,
ErrorState INT,
ErrorLine INT,
ErrorProcedure VARCHAR(128),
ErrorDate datetime
);
CREATE PROCEDURE CatchErrorDemo
AS --相关业务逻辑
BEGIN TRY
SELECT 1 / 0;
END TRY
--相关错误捕获
BEGIN CATCH
PRINT 'Error Number:' + CAST(ERROR_NUMBER() AS VARCHAR(10));
PRINT 'Error Serverity: ' + CAST(ERROR_SEVERITY() AS VARCHAR(10));
PRINT 'Error State: ' + CAST(ERROR_STATE() AS VARCHAR(10));
PRINT 'Error Procedure: ' + ERROR_PROCEDURE();
PRINT 'Error Line: ' + CAST(ERROR_LINE() AS VARCHAR(10));
PRINT 'Error Message: ' + ERROR_MESSAGE();
INSERT INTO ErrorLog
( ErrorNumber ,
ErrorSeverity ,
ErrorState ,
ErrorProcedure ,
ErrorLine ,
ErrorMessage ,
ErrorDate
)
VALUES ( ERROR_NUMBER() ,
ERROR_SEVERITY() ,
ERROR_STATE() ,
ERROR_PROCEDURE() ,
ERROR_LINE() ,
ERROR_MESSAGE() ,
GETDATE()
)
END CATCH;
--执行相关存储过程,并查询日志表,同时与系统消息表进行对比
EXEC CatchErrorDemo;
SELECT * FROM ErrorLog;
![](http://s1.51cto.com/wyfs02/M01/88/80/wKiom1f58-Xz7mXmAAANSlxB85Q127.png-wh_500x0-wm_3-wmp_4-s_915595804.png)
二、传递错误信息
CREATE PROC CatchErrorDemo2
@a INT ,
@rtn VARCHAR(20) OUTPUT ,
@rtn_message VARCHAR(200) OUTPUT
AS
BEGIN
BEGIN TRY
DECLARE @result INT;
SET @result = 'A' + @a;
END TRY
BEGIN CATCH
SET @rtn = @@ERROR;
SET @rtn_message = 'Error Number: '
+ CAST(ERROR_NUMBER() AS VARCHAR(10)) + ' Error Serverity: '
+ CAST(ERROR_SEVERITY() AS VARCHAR(10)) + ' Error State: '
+ CAST(ERROR_STATE() AS VARCHAR(10)) + ' Error Procedure: '
+ ERROR_PROCEDURE() + ' Error Line: '
+ CAST(ERROR_LINE() AS VARCHAR(10)) + ' Error Message: '
+ ERROR_MESSAGE();
END CATCH;
END;
GO
--调用存储过程
DECLARE @rtn INT ,
@rtn_message VARCHAR(200);
EXEC CatchErrorDemo2 0, @rtn OUTPUT, @rtn_message OUTPUT;
PRINT @rtn;
PRINT @rtn_message;
--Result:
245
Error Number: 245 Error Serverity: 16 Error State: 1 Error Procedure: CatchErrorDemo2 Error Line: 10
Error Message: 在将 varchar 值 'A' 转换成数据类型 int 时失败。
From: http://blog.csdn.net/leshami/article/details/51333650
对于在执行存储过程中碰到的一些错误,如果未及时捕获或者说传递给前端应用程序来,在这样的情形下,故障的排查显得尤为困难。基于此,我们可以可以将这些错误信息记录到日志,同时也可以将其传递给前端应用程序。
如本文的示例。
一、将错误信息记录到表
CREATE TABLE ErrorLog
(
ID INT IDENTITY (1,1) NOT NULL,
ErrorNumber INT,
ErrorMessage VARCHAR(1000),
ErrorSeverity INT,
ErrorState INT,
ErrorLine INT,
ErrorProcedure VARCHAR(128),
ErrorDate datetime
);
CREATE PROCEDURE CatchErrorDemo
AS --相关业务逻辑
BEGIN TRY
SELECT 1 / 0;
END TRY
--相关错误捕获
BEGIN CATCH
PRINT 'Error Number:' + CAST(ERROR_NUMBER() AS VARCHAR(10));
PRINT 'Error Serverity: ' + CAST(ERROR_SEVERITY() AS VARCHAR(10));
PRINT 'Error State: ' + CAST(ERROR_STATE() AS VARCHAR(10));
PRINT 'Error Procedure: ' + ERROR_PROCEDURE();
PRINT 'Error Line: ' + CAST(ERROR_LINE() AS VARCHAR(10));
PRINT 'Error Message: ' + ERROR_MESSAGE();
INSERT INTO ErrorLog
( ErrorNumber ,
ErrorSeverity ,
ErrorState ,
ErrorProcedure ,
ErrorLine ,
ErrorMessage ,
ErrorDate
)
VALUES ( ERROR_NUMBER() ,
ERROR_SEVERITY() ,
ERROR_STATE() ,
ERROR_PROCEDURE() ,
ERROR_LINE() ,
ERROR_MESSAGE() ,
GETDATE()
)
END CATCH;
--执行相关存储过程,并查询日志表,同时与系统消息表进行对比
EXEC CatchErrorDemo;
SELECT * FROM ErrorLog;
![](http://s1.51cto.com/wyfs02/M01/88/80/wKiom1f58-Xz7mXmAAANSlxB85Q127.png-wh_500x0-wm_3-wmp_4-s_915595804.png)
二、传递错误信息
CREATE PROC CatchErrorDemo2
@a INT ,
@rtn VARCHAR(20) OUTPUT ,
@rtn_message VARCHAR(200) OUTPUT
AS
BEGIN
BEGIN TRY
DECLARE @result INT;
SET @result = 'A' + @a;
END TRY
BEGIN CATCH
SET @rtn = @@ERROR;
SET @rtn_message = 'Error Number: '
+ CAST(ERROR_NUMBER() AS VARCHAR(10)) + ' Error Serverity: '
+ CAST(ERROR_SEVERITY() AS VARCHAR(10)) + ' Error State: '
+ CAST(ERROR_STATE() AS VARCHAR(10)) + ' Error Procedure: '
+ ERROR_PROCEDURE() + ' Error Line: '
+ CAST(ERROR_LINE() AS VARCHAR(10)) + ' Error Message: '
+ ERROR_MESSAGE();
END CATCH;
END;
GO
--调用存储过程
DECLARE @rtn INT ,
@rtn_message VARCHAR(200);
EXEC CatchErrorDemo2 0, @rtn OUTPUT, @rtn_message OUTPUT;
PRINT @rtn;
PRINT @rtn_message;
--Result:
245
Error Number: 245 Error Serverity: 16 Error State: 1 Error Procedure: CatchErrorDemo2 Error Line: 10
Error Message: 在将 varchar 值 'A' 转换成数据类型 int 时失败。
相关文章推荐
- SQLserver 存储过程执行错误记录到表
- SQL Server 存储过程中的表变量名加上'[]'后出现执行错误
- 在SQL SERVER中定时执行SQL语句,或者存储过程
- 在SQL Server启动时自动执行存储过程。第1/2页
- [VB.NET]点net写client程序传递参数给mssql存储过程insert,为什么要反复执行客户端代码才能成功insert,怎么才能使客户端插入记录操作变得稳定呢?
- BCB中执行SQLServer远程存储过程
- 如何在SQL Server存储过程中执行DTS包
- 如何在 SQL Server 的存储过程和函数里进行错误处理
- Sql Server 带参数的存储过程执行方法
- 【SQL Server】存储过程的设计概念(3)T-SQL的编译和执行过程
- SQL Server 存储过程的分页方案比拼,以及SQLServer的API服务游标信息!
- 如何在SQL Server存储过程中执行DTS包
- 在SQL Server启动时自动执行存储过程。第1/2页
- 在SQL SERVER中定时执行SQL语句,或者存储过程.
- 如何在SQL Server存储过程中执行DTS包
- sql server 自动执行存储过程
- 在sql server 中执行带参数的存储过程及计算运行时间
- 如何在SQL Server存储过程中执行DTS包
- sql server存储过程:错误21037: [SQL-DMO]在Text 属性的“CREATE...”语句中指定的名称必须与Name....问题解决
- sql server 存储过程中执行带输出参数的动态 sql