@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