入学必读
学员心得
技术文章
实习报告
学习竞赛
实战项目展示
 
主题:成就精彩IT人生
时间:本周六下午2: 30
 
> 学习园地 > 技术文章
 
程序相关->

 

在SQLserver的存储过程中处理错误    

   SQL Server 存储进程中的 “ 错误处理 ” 只是向客户端返回错误,通常访问提供者可以自己做。但是至少你可以知道在执行 T-SQL 的时候何止发生了何种错误。本文中,我会介绍在你错了 SQL Server 有接近 3800 个预定义错误代码,由主目录的 sysmessages 表维护。每一个错误代码都有相应的精确的级别,该级别大致描述了错误。错误定义的级别从 0 到 25 。 20 以上的错误代表重大错误,通常意味着该错误会导致存储进程立刻终止,并且所有的客户连接都要重新初始化。非关键性错误只是禁止掉当前运行的程序行,并继续执行。所有的错误代码都有预

   那么在得到这些信息后要做什么呢?在访问存储进程的时候发生错误,可以通过 @@ERROR 系统函数返回错误代码。通过查阅 sysmessages 可以得到真实的错误信息和级别。

   错误处理基础
   假设有一个表叫做 NoNullsAllowed, 有两个字段 Field1 和 Field2 。都不能为空。下面的
CREATE PROCEDURE IllegalInsert AS
INSERT NoNullsAllowed VALUES (NULL, NULL)
Print 'Error occurred'
Print @@ERROR
   假设还有下面的进程:
CREATE PROCEDURE SampleProcedure
AS
EXEC IllegalInsert
Print @@ERROR
   当通过 Query Analyzer 调用 SampleProcedure 的时候,错误就会发生。
Server: Msg 515, Level 16, State 2, Procedure IllegalInsert, Line 2
Cannot insert the value NULL into column 'Field2', table
'tempdb.dbo.NoNullsAllowed'; column does not allow s. INSERT fails.
The statement has been terminated.
Error occurred
0
0
   这个小试验可以告诉你一些事情
@@ERROR 函数仅仅返回错误代码
   如果 @@ERROR 返回 0 ,则没有错误。
   导致非重大错误的语句会被跳过,进程会继续执行下一个语句。

   基本策略
   由这三点,可以设计策略。现实中,实际的情况是几乎不可能制定策略,但是从某个角度检查存储进程中的每一行有些不切实际,所以应该检查那些关键的地方,比如关键性语句,如过后继语句依赖前面的语句,检测到错误后需要手动的终止进程。
   依赖访问提供者通知客户错误。

   产生错误
RAISEERROR 可以产生定制的错误信息或者编号返回给客户端。下面是 RASIEERROR 的语法,表 A 是各个参数的解释。

RAISERROR ({msg_id|msg_str}{, severity, state}

[argument [,…n]])
[WITH option [, …n]]
   首先可以利用的 RAISEERROR 产生预定义错误代码。 RAISEERROR 接收 13000 以上的错误代码。实际上, RAISERROR 更多的用来发送定制错误信息。如同图 A 所示, msg_str 标识符可以包,任意的错误信息,也就是说 RAISERROR 可以将特定的错误信息返回给客户。

   定制错误信息
   当然,大多数情况下,错误信息会使用多次,一遍一遍的输入相同的信息显然部理智。使用 sp_addmessage 存储过程将定制错误信息添加到 sysmessages 表里。以后,在使用定制错误信息的标识号必须大于等于 50000 ,信息本身的长度不能超过 255 个字符。下面是例子,创建新的信息,赋予识别号 55555 ,级别为 10 , sp_addmessage
   存储进程需要这样调用。
sp_addmessage 55555, 10, 'New error message.'
   你可以在存储进程中增加提交新的错误:
RAISERROR 55555, 10

   不难,只是不同,创建带有错误检测的存储进程并不难,仅仅是和大多数可能会用到的不同而已。只需要一个好的计划和相关的知识,可以可以很容易的使用他。
 

珠海市斯坦德软件—珠海IT培训,软件开发,IT企业培训,珠海计算机培训学校,珠海电脑培训学校,珠海电脑培训中心,珠海网络工程师培训,珠海游戏开发培训,珠海测试工程师培训,大学生JAVA/.NET实训,珠海软件工程师培训,珠海网页设计师培训,CCAT认证培训,职业教育,思科培训,微软培训,MCSE培训,CCNA培训,LINUX培训,网络安全,JAVA-J2EE培训,手机软件,游戏编程,人事部IT资格认证,教育部IT资格认证,人事部CCAT资格认证,教育部CCAT资格认证,国际IT认证,软件项目案例,就业指导