1:不是,一定要自己写程序
create proc pro__
as
begin tran
insert a select 'a'
if @@error<>0 goto sqlerr
insert b select 'b'
if @@error<>0 goto sqlerr
commit tran
return
sqlerr:
rollback
return
create proc pro__
as
begin tran
insert a select 'a'
if @@error<>0 goto sqlerr
insert b select 'b'
if @@error<>0 goto sqlerr
commit tran
return
sqlerr:
rollback
return
1. 手工回滚
if @@error<>0 then
ROLLBACK TRANSACTION2. 让事务自动回滚
SET XACT_ABORT ON-------------------------------------------------------------------------
当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。
insert b select 'b'
如果是上面俩句,如果第一语句执行完出错,那么表a已经插入数据,但是表b没有插入数据
如果第一语句执行中出错,那么表a和表b都没有插入数据
加上事务
begin tran
insert a select 'a'
insert b select 'b'
if @@error<>0
commit tran
else
rollback
如果其中任何一条语句执行出错,那么表a已经插入数据,那么表a和表b都没有插入数据注意:带begin tran 的是显式事务,是一个事务
而没有带begin tran 的是隐式事务,是俩个事务
一个事务要么全部不执行,要么全部执行完毕。
第一个insert语句应该写出数据库。而当你使用事务语句,显示地标明回滚或提交,
如果遇到上面的情况,就不应该有数据写入数据库啦!!