begin tran
insert into table1 
select ....
insert into table2 
select ....
commit tran
当被包含在事务中任何一个表插入失败时,事务中的任何操作都将回滚。

解决方案 »

  1.   

    楼上的 好象
    不行insert into table1 
    失败了
    insert into table2 
    还能执行
      

  2.   

    --启动事务处理
    declare @tran_point int --控制事务嵌套
    set @tran_point=@@trancount --保存事务点
    if @tran_point=0
    begin tran tran_[过程名称]/*执行事务体*/
    --常用跳出语句
    if @@ERROR <> 0 
    begin
    set @return= [过程内异常编号]
    goto err_lab              --跳出
    end if @@rowcount=0 
    begin
    set @return= [过程内异常编号]
    goto err_lab              --跳出
    end 
    --结束事务处理
    if @tran_point=0
    commit tran tran_[过程名称]
    goto return_lab
    err_lab:
                  if @return<100 set @return=@errcode +@return
    if @tran_point=0
    rollback tran tran_[过程名称]
    return_lab:
    return @return
      

  3.   

    begin tran
    insert into #aa
    select 'aabbs',10
    insert into #bb
    select 'asdf',1
    commit tran
    go
    begin tran
    insert into #aa
    select 'aabbs',10
    insert into #bb
    select 'asdf','a'
    commit tran
    go
    select * from #aa
    select * from #bb
    --第一个只是字符截位,没有语法错误所以通过,第二种在转换只有语法错误,所以会回滚。
    --zz5290()的通过程序判断的方法不错!
      

  4.   

    --结束事务处理
    if @tran_point=0
    commit tran tran_[过程名称]
    @tran_point只在开始的时候set @tran_point=@@trancount
    后面就没有了
    所以永远=0?
      

  5.   

    rollback  tran[过程名称]这样写好象也对