SQL SERVER 错误捕捉与事务
在SQL server (MSSQL)写代码中,不管是一段SQL代码,还是存储过程等,有的时候总会遇见程序报错,导致系统崩溃,
与C#同理,SQL SERVER 也提供了回滚与错误捕捉,事务比较复杂,有时间在以后的文章中与大家分享。
任何程序都可能出现错误,在SQL Server中执行Transact-SQL也不例外。如果在Transact-SQL中发生了错误,
一般有两种捕捉错误的方法,一种是在客户端代码(如 c#、delphi等)中使用类似try...catch的语句进行捕捉;
另外一种就是在Transact-SQL中利用Transact-SQL本身提供的错误捕捉机制进行捕捉。
本文就Transact-SQL语句的执行而产生的错误,给大家简单介绍。
不带事务,简单捕捉:

DECLARE @A TABLE (ID INT) BEGIN TRY INSERT INTO @A SELECT 1 INSERT INTO @A SELECT 'ceshi' END TRY BEGIN CATCH PRINT 'Error Number :'+CAST(ERROR_NUMBER() AS VARCHAR(10)) PRINT 'Error Message :'+ERROR_MESSAGE() PRINT 'Error Severity :'+CAST(ERROR_SEVERITY() AS VARCHAR(10)) PRINT 'Error State :'+CAST(ERROR_STATE() AS VARCHAR(10)) PRINT 'Error Line :'+CAST(ERROR_LINE() AS VARCHAR(10)) PRINT 'Error Proc :'+COALESCE(ERROR_PROCEDURE(),'not within proc') END CATCH
BEGIN TRY END TRY 关键字是错误捕捉的关键字,表示开始监测程序执行情况,中间放你的代码
BEGIN CATCH END CATCH 中间可以捕捉程序运行发生的异常,但是注意,并不是所有错误都可以捕捉,当然,
可以配置进SQL SERVER 数据库。
BEGIN CATCH END CATCH之间可以很多事,比如写入操作日志,或者进行其他操作,此方法不会回滚你所执行的代码,需要手动修改
带事务的,简单捕捉:

IF (OBJECT_ID('A','U') IS NOT NULL) DROP TABLE A CREATE TABLE A(ID INT) BEGIN TRAN BEGIN TRY INSERT INTO A SELECT 1 INSERT INTO A SELECT 'ceshi' COMMIT TRAN --提交事务 END TRY BEGIN CATCH ROLLBACK TRAN--回滚事务 PRINT 'Error Number :'+CAST(ERROR_NUMBER() AS VARCHAR(10)) PRINT 'Error Message :'+ERROR_MESSAGE() PRINT 'Error Severity :'+CAST(ERROR_SEVERITY() AS VARCHAR(10)) PRINT 'Error State :'+CAST(ERROR_STATE() AS VARCHAR(10)) PRINT 'Error Line :'+CAST(ERROR_LINE() AS VARCHAR(10)) PRINT 'Error Proc :'+COALESCE(ERROR_PROCEDURE(),'not within proc') END CATCH
如果执行上面的代码,将会输出以下内容:
把 SELECT * FROM A 加上,会看见A表中并未出现插入的数据
SQL SERVER 消息库
今天的分享到此结束,有需要的可以关注留言讨论
能帮朋友解决问题的记得给个关注支持一下,以后将多多分享SQL SERVER 相关知识
本文来自博客园,作者:酒笙匿清栀,转载请注明原文链接:https://www.cnblogs.com/libo962464/p/16363620.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构