daixinet

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

   编程的异常处理很重要,当然Sql语句中存储过程的异常处理也很重要,明确的异常提示能够快速的找到问题的根源,节省很多时间。

下面,我就以一个插入数据为例来说明Sql Server中的存储过程怎么捕获异常的 。

1、环境

  (1)数据库为Sql Server2008。

  (2)表(Course)结构为:

    No char(10)  primary key

    Name varchar(20)

    Comment varchar(50)

2、存储过程

  就以插入数据为例,其他的可以照着写就行了。  

  编程语言都有异常的捕获与处理, 在 SqlServer2008 中也是这样子的。

对会出现异常的语句加上 begin try……end try ,然后进行异常捕捉:begin catch……end catch即可。

   错误代码详解 很容易就能找到。

  代码如下:

 1 Create proc sp_Insert_Course
2 @No char(10),
3 @Name varchar(20),
4 @Comment varchar(50),
5 @rtn int output
6 as
7 begin try
8 insert into Course values(@No,@Name,@Comment)
9 set @rtn=1
10 end try
11 begin catch
12 set @rtn=@@ERROR
13
14 --辅助信息
15 --select ERROR_LINE() as Line,
16 -- ERROR_MESSAGE() as message1,
17 -- ERROR_NUMBER() as number,
18 -- ERROR_PROCEDURE() as proc1,
19 -- ERROR_SEVERITY() as severity,
20 -- ERROR_STATE() as state1
21 end catch

 3、存储过程执行

  相关代码如下:

1 declare
2 @rtn int
3 exec sp_Insert_Course '114','语文','',@rtn output
4 print @rtn

 执行结果:

  正常的情况下,返回值为1,

  如果已经存在编号为“114”的数据,就会返回 ERROR_CODE:2627,

  其他的异常情况会返回相应的代码

4、说明

  如果程序有异常,把异常代码返回,然后再进行相关的处理即可。

   SQL Server中的异常处理和别的数据库(如Oracle)的有点差异,但是基本思想差不多, 在最后捕获都可以得到异常。 

  希望能够对大家有所帮助。

 

posted on 2011-08-12 14:55  daixinet.com  阅读(9873)  评论(2编辑  收藏  举报