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

解决方案 »

  1.   

    事务回滚有2个办法:
    1. 手工回滚
    if @@error<>0 then
           ROLLBACK TRANSACTION2. 让事务自动回滚
    SET XACT_ABORT ON-------------------------------------------------------------------------
    当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。
      

  2.   

    insert a select 'a'
    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 的是隐式事务,是俩个事务
    一个事务要么全部不执行,要么全部执行完毕。
      

  3.   

    在存储过程中,如果你没有事务语句,当你执行完1后系统突然出错,
    第一个insert语句应该写出数据库。而当你使用事务语句,显示地标明回滚或提交,
    如果遇到上面的情况,就不应该有数据写入数据库啦!!