ponh 发表于 2013-12-19 09:34:17

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

wsxxz 发表于 2013-12-25 03:05:14

Y,我在你眼里是不是一个笑话,为什么我感觉会如此不堪。

banbanbai 发表于 2013-12-31 20:56:27

拥有、笑过、哭过。太多理由。爱已经腐朽。

kevin0490 发表于 2014-1-3 02:37:13

请不要拥抱我、我的心是凉的,别再说对不起。
页: [1]
查看完整版本: SQL Server错误与事务处理