`

同时提交同时回滚的问题

阅读更多

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

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
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics