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 相关知识