-- 默认情况 SET XACT_ABORT OFFprint4print2/0// 该句会报错,但不会影响上下两句print4
如果开启中断,设置 SET XACT_ABORT ON
那么在批处理情况下,出错的语句不会生效,并从该处停止,后面的代码也不会执行
SET XACT_ABORT ONprint4print2/0-- 该句会报错,但不会影响上面已执行的代码print4-- 该句也会不执行,因为开启了中断
如果设置了SET XACT_ABORT ON,且在事务中出现了错误,会自动进行事务回滚
SET XACT_ABORT ON-- 开启中断BEGINTRANSACTION-- 开始事务 print4-- 因错误回滚,相当于未执行过print2/0-- 该句会报错,并且事务中的代码都会回滚(ROLLBACK),即相当于未执行过print4-- 因中断不会执行
事务回滚
如果没有设置事务的存档点,那么,通过ROLLBACK TRANSACTION 会回滚整个事务
BEGINTRANSACTION-- 开启事务UPDATE bank SET currentMoney=currentMoney-1000WHERE customerName="张三"UPDATE bank SET currentMoney=currentMoney+1000WHERE customerName="李四"ROLLBACKTRANSACTION-- 上面两句代码都会被回滚,相当于未执行过
BEGINTRANSACTION-- 开启事务UPDATE bank SET currentMoney=currentMoney-1000WHERE customerName="张三"-- 正常执行SET TRANSATION save_demo -- 设置事务存档UPDATE bank SET currentMoney=currentMoney+1000WHERE customerName="李四"-- 被回滚ROLLBACKTRANSACTION save_demo -- 回滚到save_demo处,相当于只回滚了 '李四',而'张三'不受影响