SQL Server错误与事务处理
2013-12-18 12:45 昏晓 阅读(569) 评论(0) 编辑 收藏 举报T-SQL中出现的错误,依据和事务的关系,可以分为两种情况:
- 有的错误会导致发生错误位置之后的代码不再执行,如果错误位置在事务中,该事务也会自动回滚(即在错误位置之后的rollback语句不会执行,但是事务仍然会回滚);在错误位置之后判断@@Error变量的值也是没有意义的,因为错误位置之后的代码根本不执行了。
- 有的错误不影响发生错误位置之后的代码执行,如果错误位置在事务中,该事务也不会自动回滚;
至于什么样的错误会导致发生错误位置之后的代码不执行,哪些不会,则还没有弄明白。
关于@@ERROR变量:
@ERROR变量,返回的是上一个T-SQL语句的执行结果,如果上一个 Transact-SQL 语句执行成功,@@ERROR 系统函数将返回 0;如果该语句生成错误,@@ERROR 将返回错误号。每个 Transact-SQL 语句完成时,@@ERROR 的值都会更改。这里的“每个”确实是“每个”,即使是使用 if 判断了@@ERROR的值,在 if 语句后的@@ERROR值已经改变了。
得到上述结果的测试代码如下:
1 create table tbl_ligsh_test_transaction( 2 id int not null identity( 1, 1 ) primary key, 3 name varchar( 10 ) 4 ) 5 8 alter procedure ligsh_test_transaction 9 as 10 begin 11 begin transaction 12 insert into tbl_ligsh_test_transaction ( name ) 13 values ( 'name' ) 14 15 --declare @var int 16 --set @var = '22' 17 18 --raiserror( N'message', 16, 1 ) 19 if @@error = 0 20 begin 21 insert into tbl_ligsh_test_transaction( name ) 22 values ( 'name' ) 23 24 end 25 else 26 begin 27 rollback transaction 28 return 29 end 30 commit transaction 31 end 32 go