SQL Server中使用异常处理调试存储过程
2017-04-19 08:30
423 查看
异常处理被普遍认为是T-SQL脚本编程中的最弱的方面。幸运的是,这一点在SQL Server 2005中得到了改变,因为SQL Server 2005支持结构化异常处理。本文首先关注新特性“TRY……CATCH”的基本构成,然后在SQL Server 2000和SQL Server 2005中对照着看一些T-SQL的例子,这些例子中使用事务代码故意制造了一些违反约束限制的情况。将来的文章会继续探讨这一主题。
在SQL Server之前的版本中,你需要在执行INSERT,UPDATE,DELETE之后立即检查全局变量“@@error”来处理异常,如果“@@error”变量不为零的话(表示有错误),就接着执行一些纠正动作。开发人员常常重复这种与业务逻辑无关的代码,这会导致重复代码块,而且需要与GOTO语句和RETURN语句结合使用。
结构化异常处理为控制具有许多动态运行时特性的复杂程序提供了一种强有力的处理机制。目前,这种机制经实践证明是良好的,许多流行的编程语言(比如:微软的Visual Basic.Net和Visual C#)都支持这种异常处理机制。接下来你会在例子中看到,采用了这种健壮的方法以后,会使你的代码可读性和可维护性更好。TRY块包含了可能潜在失败的事务性代码,而CATCH块包含了TRY块中出现错误时执行的代码。如果TRY块中出现了任何错误,执行流程被调转到CATCH块,错误可以被处理,而出错函数可以被用来提供详细的错误信息。TRY……CATCH基本语法如下:
BEGIN TRY
RAISERROR ('Houston, we have a problem', 16,1)
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() as ERROR_NUMBER,
ERROR_SEVERITY() as ERROR_SEVERITY,
ERROR_STATE() as ERROR_STATE,
ERROR_MESSAGE() as ERROR_MESSAGE
END CATCH
注意上面脚本中函数的用法,我们可以用它们代替局部变量和(或者)全局变量。这些函数只应该被用在CATCH块中,函数功能说明如下:
ERROR_NUMBER() 返回错误数量。
ERROR_SEVERITY() 返回错误严重等级。
ERROR_STATE() 返回错误状态号。
ERROR_PROCEDURE() 返回出错位置存储过程或者触发器的名称。
ERROR_LINE() 返回程序中引起错误的行号。
ERROR_MESSAGE() 返回错误信息的完整文本。错误内容包括可替换参数的值,比如:长度,对象名称或者时间。
在SQL Server之前的版本中,你需要在执行INSERT,UPDATE,DELETE之后立即检查全局变量“@@error”来处理异常,如果“@@error”变量不为零的话(表示有错误),就接着执行一些纠正动作。开发人员常常重复这种与业务逻辑无关的代码,这会导致重复代码块,而且需要与GOTO语句和RETURN语句结合使用。
结构化异常处理为控制具有许多动态运行时特性的复杂程序提供了一种强有力的处理机制。目前,这种机制经实践证明是良好的,许多流行的编程语言(比如:微软的Visual Basic.Net和Visual C#)都支持这种异常处理机制。接下来你会在例子中看到,采用了这种健壮的方法以后,会使你的代码可读性和可维护性更好。TRY块包含了可能潜在失败的事务性代码,而CATCH块包含了TRY块中出现错误时执行的代码。如果TRY块中出现了任何错误,执行流程被调转到CATCH块,错误可以被处理,而出错函数可以被用来提供详细的错误信息。TRY……CATCH基本语法如下:
BEGIN TRY
RAISERROR ('Houston, we have a problem', 16,1)
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() as ERROR_NUMBER,
ERROR_SEVERITY() as ERROR_SEVERITY,
ERROR_STATE() as ERROR_STATE,
ERROR_MESSAGE() as ERROR_MESSAGE
END CATCH
注意上面脚本中函数的用法,我们可以用它们代替局部变量和(或者)全局变量。这些函数只应该被用在CATCH块中,函数功能说明如下:
ERROR_NUMBER() 返回错误数量。
ERROR_SEVERITY() 返回错误严重等级。
ERROR_STATE() 返回错误状态号。
ERROR_PROCEDURE() 返回出错位置存储过程或者触发器的名称。
ERROR_LINE() 返回程序中引起错误的行号。
ERROR_MESSAGE() 返回错误信息的完整文本。错误内容包括可替换参数的值,比如:长度,对象名称或者时间。
相关文章推荐
- SQL Server中使用异常处理调试存储过程
- SQL Server中使用异常处理调试存储过程
- SQL Server中使用异常处理调试存储过程
- SQL Server中使用异常处理调试存储过程(转)
- SQL Server中使用异常处理调试存储过程
- SQL SERVER中 存储过程使用事务与捕获异常
- 存储过程里面使用in变量列表异常的处理
- SQL Server存储过程中的异常处理
- 在存储过程中使用事务处理 sql server 删除多表操作一致性的问题
- Sql Server存储过程之异常的简单处理
- SQL Server 存储过程中使用raiserror抛出异常
- 使用SQL Mail收发和自动处理邮件中的扩展存储过程简介
- [导入]调试SQL Server的存储过程及用户定义函数
- [翻译]使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
- 在Visual Studio 2005中调试SQL Server 2005的存储过程
- [转贴]在Visual Studio 2005中调试SQL Server 2005的存储过程
- [翻译]使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
- 使用C#创建SQL Server的存储过程
- 调试SQL Server的存储过程及用户定义函数
- SQL Server 2000 处理操作系统注册表的系统存储过程