你的做法并没有错。 很多时候我们常用的都是每写一条sql语句紧接判断@@ERROR值,>0的话就回滚。当然有时候我们不想每天语句都来判断@ERROR值,那么这时候可以用SET XACT_ABORT ON .一般写法: SET XACT_ABORT ON BEGIN TRAN ... ... COMMIT TRAN 只要有错误发生都会自动会滚,与我们判断@@ERROR效果一样。不过感觉根据每条语句判断,发生错误时候可以清晰的把具体那一条sql语句错误返回客户端。所以如果不偷懒的话,还是判断@@ERROR较好。
如果需要保证数据处理的一致性,在事务开始前,都要加Set Xact_abort on。SET XACT_ABORT ON BEGIN TRAN ... ... COMMIT TRAN这样,事务过程中的任何一条SQL语句出错,都会回滚整个事务。
很多时候我们常用的都是每写一条sql语句紧接判断@@ERROR值,>0的话就回滚。当然有时候我们不想每天语句都来判断@ERROR值,那么这时候可以用SET XACT_ABORT ON
.一般写法:
SET XACT_ABORT ON
BEGIN TRAN
...
...
COMMIT TRAN
只要有错误发生都会自动会滚,与我们判断@@ERROR效果一样。不过感觉根据每条语句判断,发生错误时候可以清晰的把具体那一条sql语句错误返回客户端。所以如果不偷懒的话,还是判断@@ERROR较好。
BEGIN TRAN
...
...
COMMIT TRAN这样,事务过程中的任何一条SQL语句出错,都会回滚整个事务。