SQL Server错误与事务处理
T-SQL中出现的错误,有两种情况:有的错误会导致发生错误位置之后的代码不再执行,如果错误位置在事务中,该事务也会自动回滚(即在错误位置之后的rollback语句不会执行,但是事务仍然会回滚);在错误位置之后判断@@Error变量的值也是没有意义的,因为错误位置之后的代码根本不执行了。
有的错误不影响发生错误位置之后的代码执行,如果错误位置在事务中,该事务也不会自动回滚;
至于什么样的错误会导致发生错误位置之后的代码不执行,哪些不会,则还没有弄明白。
关于@@ERROR变量:
@ERROR变量,返回的是上一个T-SQL语句的执行结果,如果上一个 Transact-SQL 语句执行成功,@@ERROR 系统函数将返回 0;如果该语句生成错误,@@ERROR 将返回错误号。每个 Transact-SQL 语句完成时,@@ERROR 的值都会更改。这里的“每个”确实是“每个”,即使是使用 if 判断了@@ERROR的值,在 if 语句后的@@ERROR值已经改变了。
得到上述结果的测试代码如下:
create table tbl_ligsh_test_transaction( id int not null identity( 1, 1 ) primary key, name varchar( 10 ))
use OPDATAgoalter procedure ligsh_test_transactionasbegin begin transaction insert into tbl_ligsh_test_transactiond ( name ) values ( 'name' ) --declare @var int --set @var = '22' --raiserror( N'message', 16, 1 ) if @@error = 0 begin insert into tbl_ligsh_test_transaction( name ) values ( 'name' ) end else begin rollback transaction return end commit transactionendgo
Y,我在你眼里是不是一个笑话,为什么我感觉会如此不堪。 拥有、笑过、哭过。太多理由。爱已经腐朽。 请不要拥抱我、我的心是凉的,别再说对不起。
页:
[1]