同时提交同时回滚的问题

同时提交同时回滚的问题,原题是如果没有卡的信息或是卡里没有钱就不做插入操作;

create   procedure   myP  
  as  
   
  begin   tran  
  update   db1.dbo.tableA  
  set     qty   =qty-10  
  if   @eeror<>0  
   
  rollback  
   
  else  
  update   db2.dbo.tableB  
  set     qty=qty+10  
  end    
   
  if   @error<>0  
  rollback  
  else  
  commit   tran  
   
   
  ----exec   myP  

 

 

 

 

 

 

 

2:delcare   @er1   int,@er2   int  
  BEGIN   TRANSACTION  
  Update   table1......  
  select   @er1=@@error  
  Update   table2......  
  select   @er2=@@error  
  if   @er1=0   and   @er2=0  
            COMMIT   TRANSACTION  
  else  
        ROLLBACK   TRANSACTION

 

 

3:db1和db2在不同的机器上,db1和db2之间作个链接服务器就可以了。使用链接服务器的效果是不是等同于分布式事务呢?  
  按照各位高手的回复来看,与基于一台服务器的实现方式类似,利用了事务,  
  那么这个事务是分布式的吗?需要MTS的协助吗?

 

做服务器连接用sp_addlinkedserver  
  假设以下操作在DB2所在的服务器上进行  
  sp_addlinkedserver   'db1ServerName',N'SQL   Server'  
  go  
  create   procedure   YourProcedureName  
  as  
  declare   @DB1Err   int  
  begin   tran    
      insert   db1ServerName.DB1..表名   values   (....)  
      set   @DB1Err=@@error  
      insert   DB2..表名   values   (....)  
      if   @DB1Err<>0   or   @@error<>0  
          rollback   tran  
   
  commit   tran  
    go

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值