六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 84|回复: 0

同时提交同时回滚的问题

[复制链接]

升级  96%

10

主题

10

主题

10

主题

童生

Rank: 1

积分
48
 楼主| 发表于 2013-1-13 18:36:50 | 显示全部楼层 |阅读模式
同时提交同时回滚的问题,原题是如果没有卡的信息或是卡里没有钱就不做插入操作;
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
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表