存儲過程如下所示:create procedure  sp_test
as
--刪除t1表中的數據,然後將t2表中的數據導入到t1表中delete from t1 
insert into t1 select * from t2--刪除t3表中的數據,然後將t4表中的數據導入到t3表中
delete from t3
insert into t3 select * from t4請問如何使用事務去控制t1表的刪除插入操作?又如何去控制t3表的刪除和插入操作?可以建立兩個事務嗎?
我想在這個存儲過程中t3表的刪除插入失敗不讓它影響到t1表的成功操作,不知道大家有沒有聽懂我講的意思

解决方案 »

  1.   

    對於t1這張表,我想對它的delete和insert 操作要么都執行,要么全不執行,如果不使用事務去控制,就有可能出現delete了t1表,但沒insert 新數據的情況
      

  2.   

    那应用事务吧。
    BEGIN transaction 事务名...if @@error=0
       commit transaction  事务名
    else
       rollback transaction 事务名
      

  3.   


    create procedure  sp_test
    as
    --刪除t1表中的數據,然後將t2表中的數據導入到t1表中begin transcaton test
    delete from t1 
    insert into t1 select * from t2--刪除t3表中的數據,然後將t4表中的數據導入到t3表中
    delete from t3
    insert into t3 select * from t4
    if @@error=0
        commit transcation test
    else
        rollback transcation test
      

  4.   

    create procedure  sp_test
    as
    --刪除t1表中的數據,然後將t2表中的數據導入到t1表中begin 
    declare @err int
    select @err=0
    delete from t1 
    begin tran
    set @err=@err+@@error
    insert into t1 select * from t2
    set @err=@err+@@error
    --刪除t3表中的數據,然後將t4表中的數據導入到t3表中
    delete from t3
    set @err=@err+@@error
    insert into t3 select * from t4
    set @err=@err+@@error
    if @err=0
        commit tran
    else
        rollback tran
    end