博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql server try...catch使用
阅读量:6371 次
发布时间:2019-06-23

本文共 1895 字,大约阅读时间需要 6 分钟。

Transact-SQL 代码中的错误可使用 TRY…CATCH 构造处理,此功能类似于C#语言的异常处理功能。TRY…CATCH 构造包括两部分:一个 TRY 块和一个 CATCH 块

1.TRY...CATCH 块不处理导致数据库引擎关闭连接的严重性为 20 或更高的错误。但是,只要连接不关闭,TRY...CATCH 就会处理严重性为 20 或更高的错误。
2.严重性为 10 或更低的错误被视为警告或信息性消息,TRY...CATCH 块不处理此类错误。

1--ids 主键 2createtable test1( ids intnotnull,3constraint pk_test1 primarykey(ids)4)5go6select*from test17begin try89BEGINTRAN10insertinto test1 (ids)11select11213insertinto test1 (ids)14select21516insertinto test1 (ids)17select1--违反了主键约束 1819COMMITTRAN20PRINT'Transaction committed'21end try22begin catch23ROLLBACK24PRINT'Transaction rolled back'2526SELECT27 ERROR_NUMBER() AS ErrorNumber,28 ERROR_SEVERITY() AS ErrorSeverity,29 ERROR_STATE() AS ErrorState,30 ERROR_PROCEDURE() AS ErrorProcedure,31 ERROR_LINE() AS ErrorLine,32 ERROR_MESSAGE() AS ErrorMessage;33end catch3435select*from test136

TRY...CATCH 使用下列错误函数来捕获错误信息:

ERROR_NUMBER() 返回错误号。
ERROR_MESSAGE() 返回错误消息的完整文本。此文本包括为任何可替换参数(如长度、对象名或时间)提供的值。
ERROR_SEVERITY() 返回错误严重性。
ERROR_STATE() 返回错误状态号。
ERROR_LINE() 返回导致错误的例程中的行号。
ERROR_PROCEDURE() 返回出现错误的存储过程或触发器的名称。

1BEGIN TRY2SELECT1/0;3END TRY4BEGIN CATCH5SELECT6 ERROR_NUMBER() AS ErrorNumber,7 ERROR_SEVERITY() AS ErrorSeverity,8 ERROR_STATE() AS ErrorState,9 ERROR_PROCEDURE() AS ErrorProcedure,10 ERROR_LINE() AS ErrorLine,11 ERROR_MESSAGE() AS ErrorMessage;12END CATCH;13

对于与TRY...CATCH 构造在同一执行级别发生的错误,TRY...CATCH 将不处理以下两类错误:
1.编译错误,例如阻止批处理执行的语法错误。
2.语句级重新编译过程中出现的错误,例如由于名称解析延迟而造成在编译后出现对象名解析错误。

1--由SELECT 语句生成的对象名解析错误是不被TRY…CATCH 构造捕捉 2BEGIN TRY3-- Table does not exist 4SELECT*FROM Table1;5END TRY6BEGIN CATCH7SELECT8 ERROR_NUMBER() AS ErrorNumber,9 ERROR_SEVERITY() AS ErrorSeverity,10 ERROR_STATE() AS ErrorState,11 ERROR_PROCEDURE() AS ErrorProcedure,12 ERROR_LINE() AS ErrorLine,13 ERROR_MESSAGE() AS ErrorMessage;14END CATCH15 如果某个错误在 TRY 块内的编写或语句级别重新编写过程中并在较低的执行级别(例如,执行 sp_executesql 或用户定义存储过程时)发生,则该错误会在低于 TRY…CATCH 构造的级别上发生,并由相关联的 CATCH 块处理。

转载地址:http://afuqa.baihongyu.com/

你可能感兴趣的文章
关于/var/run/docker.sock
查看>>
SCrapy爬虫大战京东商城
查看>>
用 JavaScript 实现链表操作 - 11 Alternating Split
查看>>
Laravel优秀扩展包整理
查看>>
日志分析之识别真假蜘蛛与处理办法
查看>>
太多脚本将会毁掉持续交付
查看>>
一地鸡毛 OR 绝地反击,2019年区块链发展指南
查看>>
卢森堡大学发布RepuCoin系统,可破解区块链51%攻击
查看>>
国内云计算厂商众生相:四大阵营十几家企业生存盘点
查看>>
细说Unicode(一) Unicode初认识
查看>>
Node.js有了新的管理者
查看>>
Java 20年:历史与未来
查看>>
彻底理解Javascript中的原型链与继承
查看>>
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
如何:强化 TCP/IP 堆栈安全
查看>>
Spring3 MVC中使用Swagger生成API文档
查看>>
FastCGI PHP on Windows Server 2003
查看>>
LimeSDR Getting Started Quickly | LimeSDR上手指南
查看>>
JSP标签JSTL的使用(1)--表达式操作
查看>>
SAP顾问的人脉比技术更为重要
查看>>