SQL异常捕捉
捕捉异常:try---catch
SQL提供了和编程语言类似的try-catch机制,帮助存储过程更加健壮,不至于遇到任何错误就终结存储过程。在try的语句块中遇到异常后,会暂停执行try的SQL语句,并跳转到最近的catch代码块中继续执行。
语法框架
Begin try Begin [需要执行的SQL语句] End End try Begin catch Begin [在上一个begin try和end try中一旦产生异常,就会停止执行 剩下的语句,并跳转到begin catch和end catch的语句中继续 执行] End End catch
制造异常
以SQL server为例,它提供了raiserror()函数用于抛出异常。其实有很多编程语言都提供了相似的异常捕获机制,因此这种机制对于有编程基础的小伙伴来说会非常熟悉。
raiserror()的语法结构
1 RAISERROR ( { msg_id | msg_str | @local_variable } 2 { ,severity ,state } 3 [ ,argument [ ,...n ] ] 4 ) 5 [ WITH option [ ,...n ] ]
这个函数中各个参数的意义可以参考这一篇文章,我在此不做太多赘述:
https://www.cnblogs.com/xugang/archive/2011/04/09/2010216.html
这五个参数中的后两个可以不填,因此可以将这个函数简化成一下形式:
1 RAISERROR (msg_str,severity,state) 2 /* 3 msg_str:用户自定义的错误消息 4 Severity:错误级别。任何用户都可以指定 0 到 18 之间的严重级别。[0,10]的闭区间内,不会跳到catch;如果是[11,19],则跳到catch;如果[20,无穷),则直接终止数据库连接 5 State:介于 1 至 127 之间的任意整数。(state 默认值为1)当state 值为 0 或大于 127 时会生成错误! 6 */
raiserror()的简单用法
在刚接触编程时,我对这种人为产生异常的行为非常困惑——我们写SQL语句都是尽量避免报错,为什么还要主动生成错误?
在实际使用中,这个函数常常配合判断语句用于定位错误位置,区分错误类型。
Begin try Begin If (条件一) raiserror(错误1,11,1) If (条件二) raiserror(错误2,11,2) If (条件三) raiserror(错误3,11,3) End End try Begin catch Begin [遇到异常后执行的语句] End End catch
常用的和异常相关的系统函数
通过这些函数可以帮助我们更好的定位和判断错误信息
ERROR_NUMBER() --返回错误号。 ERROR_SEVERITY() --返回严重性。 ERROR_STATE() --返回错误状态号。 ERROR_PROCEDURE() --返回出现错误的存储过程或 触发器的名称。 ERROR_LINE() --返回导致错误的例程中的行 号。 ERROR_MESSAGE() --返回错误消息的完整文本。
posted on 2021-12-10 17:44 DarknessHover 阅读(1131) 评论(0) 编辑 收藏 举报