• sqlserver分布式事务


    启动服务中的Distributed Transaction Coodinator后

    创建链接服务器ender-pcsubx

    设定连接服务器RPC OUT 以及RPC属性为True

    实验一下代码

    创建表

    CREATE TABLE [dbo].[yuf](
    	[id] [uniqueidentifier] NOT NULL,
    	[namx] [nvarchar](50) NOT NULL,
    ) ON [PRIMARY]
    

    第一种方法显示调用begin distributed transaction  

    set XACT_ABORT on 
    begin distributed transaction distributedtran
    
    begin
    
    declare @rowcounts int =0;
    
    insert into dbo.yuf(id,namx) values(newid(),N'test1');
    select * from dbo.yuf;
    
    set @rowcounts=@rowcounts+(select @@ROWCOUNT);
    
    insert into [ender-pcsubx].subt.dbo.yuf(id,namx) values(newid(),N'test1'+REPLICATE(N'1',50));
    
    
    set @rowcounts=@rowcounts+(select @@ROWCOUNT);
    
    if @rowcounts=2
    
    commit transaction distributedtran;
    
    else
    
    rollback transaction distributedtran;
    
    end
    
    go
    
    select * from dbo.yuf;
    

     

    第二种方法跟调用本地事务一样

    USE test
    EXEC sp_configure 'remote proc trans', 1 ;  
    GO  
    RECONFIGURE ;  
    GO  
    

     

    1)调用存储过程方式

    CREATE PROCEDURE xt
    	@l int
    AS
    BEGIN
    	set xact_abort on;
    	begin tran
    	
    
    	insert into dbo.yuf(id,namx) values(newid(),N'test1');
    
    	insert into [ender-pcsubx].subt.dbo.yuf(id,namx) values(newid(),N'test1'+REPLICATE(N'1',@l));
    	commit tran;
    
        
    END
    GO
    

      

    exec dbo.xt @l=55;--插入超长字符串,导致两个表数据回滚
    GO
    exec dbo.xt @l=20;--两表插入正常
    

    2)直接脚本调用方式

    set xact_abort on
    begin tran
    
    declare @rowcounts int =0;
    
    insert into dbo.yuf(id,namx) values(newid(),N'test1');
    select * from dbo.yuf;
    
    set @rowcounts=@rowcounts+(select @@ROWCOUNT);
    
    insert into [ender-pcsubx].subt.dbo.yuf(id,namx) values(newid(),N'test1'+REPLICATE(N'1',20));
    
    
    set @rowcounts=@rowcounts+(select @@ROWCOUNT);
    
    commit transaction 
    

      

  • 相关阅读:
    24点游戏算法
    汉诺塔算法
    台阶算法
    质因数分解算法
    全排列递归算法
    DFS 深度优先搜索例题
    容器
    数细胞
    C++栈和队列
    C++STL中vector容器 begin()与end()函数、front()与back()的用法
  • 原文地址:https://www.cnblogs.com/coolyylu/p/11695307.html
Copyright © 2020-2023  润新知