模拟三个库(同一个实例中),分别是DB1、DB2、DB3
整个事务的业务如下:
1、DB1写入表数据
2、DB2写入表数据
3、DB3调用存储过程写入表数据
4、每次写入表数据间隔模拟抛异常流程,查看数据是否回滚
 
 
代码如下:
 
BEGIN TRY
 
    BEGIN TRAN
        INSERT INTO DB1.dbo.Log
                ( Type, Message, Stack, Created )
        VALUES  ( 0, -- Type - int
                  N'Message', -- Message - nvarchar(100)
                  N'Stack', -- Stack - nvarchar(max)
                  '2010-03-12 05:43:17'  -- Created - datetime
                  )
                  
      --  RAISERROR ('插入第一个库后失败.', -- Message text.
                        --16, -- Severity.
                        --1 -- State.
                     --  );
               
        INSERT INTO DB2.dbo.Agent
                ( Name ,
                  Mobile ,
                  Password ,
                  LocationID ,
                  Address ,
                  Status ,
                  CreateTime
                )
        VALUES  ( N'Name' , -- Name - nvarchar(50)
                  'Mobile' , -- Mobile - varchar(16)
                  'Password' , -- Password - varchar(64)
                  0 , -- LocationID - int
                  N'Address' , -- Address - nvarchar(256)
                  0 , -- Status - int
                  '2015-05-22 05:43:48'  -- CreateTime - datetime
                )          
                
        --RAISERROR ('插入第二个库后失败.', -- Message text.
        --                16, -- Severity.
        --                1 -- State.
        --               );
                       
        EXEC TestDB.dbo.SP_T1   --DB3存储过程
                
        RAISERROR ('插入存储过程后失败.', -- Message text.
                    16, -- Severity.
                    1 -- State.
                   );               
    COMMIT TRAN
END TRY
 
BEGIN CATCH
    IF @@TRANCOUNT > 0---------------判断有没有事务
        BEGIN
            PRINT ERROR_MESSAGE()
            ROLLBACK TRAN----------回滚事务
        END 
END CATCH
 
 

SQL Server 跨数据库事务的更多相关文章

  1. [转] sql server 跨数据库调用存储过程

    A库存储过程: create PROCEDURE [dbo].[spAAAForTest] ( ) =null , ) =null ) AS BEGIN select N'A' AS a , N'B' ...

  2. sql server 跨数据库调用存储过程

    A库存储过程: create PROCEDURE [dbo].[spAAAForTest] ( ) =null , ) =null ) AS BEGIN select N'A' AS a , N'B' ...

  3. SQL Server 跨数据库查询

    语句 SELECT * FROM 数据库A.dbo.表A a, 数据库B.dbo.表B b WHERE a.field=b.field "DBO"可以省略 如 SELECT * F ...

  4. SQL Server跨数据库 增删查改

    比如你在库A ,想查询库B的表.可以用 数据库名.架构名.表名的方式查询 select * from 数据库B.dbo.表1 也可以在存储过程中这样使用. 需要注意的是,如果使用这样的查询方式,你必须 ...

  5. sql server 跨数据库插入数据

    创建服务器的连接,创建好后可以存在服务器上,可以在不同位置重复使用,和系统函数类似 exec sp_addlinkedserver 'RemoteServer', '', 'SQLOLEDB ', ' ...

  6. 使用SQL Server 2008的事务日志传送功能备份数据库(logshiping)

    使用SQL Server 2008的事务日志传送功能备份数据库(logshiping) 使用SQL Server 2008的事务日志传送功能备份数据库(logshiping)

  7. SQL Server 跨网段(跨机房)FTP复制

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 搭建过程(Process) 注意事项(Attention) 参考文献(References) ...

  8. SQL Server 跨网段(跨机房)复制

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搭建过程(Process) 注意事项(Attention) 参考 ...

  9. SQL Server 复制:事务发布

    一.背景 在复制的运用场景中,事务发布是使用最为广泛的,我遇到这样一个场景:在Task数据库中有Basic与Group两个表,需要提供这两个表的部分字段给其它程序读取放入缓存,程序需要比较及时的获取到 ...

随机推荐

  1. bzoj 1007 凸壳

    首先明确一个概念 左面内个叫上凸壳,右面那个叫下凸壳 然后我们只需要维护一个上图壳就行了,先按着斜率排序,每次加进来一条边,判断tot边和这个边与tot-1边的交点横坐标, 如果这条边的横坐标小就一直 ...

  2. 安装l Xposed Framework

    How to install Xposed Framework on Android 4.x.x :   1. For Android 4.0.3 through 4.4.4 Visit this X ...

  3. 如何利用好chrome控制台这个神器好好调试javascript代码

    上面的文章已经大致介绍了一下console对象具体有哪些方面以及基本的应用,下面简单介绍一下如何利用好chrome控制台这个神器好好调试javascript代码(这个才是我们真正能用到实处的地方) 1 ...

  4. 自旋锁spin_lock和raw_spin_lock【转】

    转自:http://blog.csdn.net/droidphone/article/details/7395983 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 临界区Cr ...

  5. strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。

    strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用. http://bbs.51cto.com/thread-1106891-1.html

  6. 新版谷歌浏览器设置flash插件不提示步骤

    1.先去chrome实验室界面chrome://flags/#enable-ephemeral-flash-permission选择取消Disabled.取消该实验室选项. 2.然后去chrome:/ ...

  7. 编译opencv2.4.11时出现错误:error: ‘NppiGraphcutState’ has not been declared

    安装cuda之后再安装opencv时出现错误: /data/opencv-2.4.11/modules/gpu/src/graphcuts.cpp:120:54: error: ‘NppiGraphc ...

  8. iOS运行时,如何增加成员变量

    必须实现getter和setter方法 ``` - (void)setName:(NSString *)name { /** * 为某个类关联某个对象 * * @param object#> 要 ...

  9. 【原创】Maven cobertura整合多个子项目下的单测覆盖率报告

    今天在调试一个UT job的时候发现找不到cobertural报告文件,后来发现在Maven的自项目里找到了对应的代码覆盖率报告,但都是是分散在每个子项目下面的,看起来很不方便.就在想是不是可以把这些 ...

  10. uiautomator2 +Python进行Android原生应用UI测试

    uiautomator2封装了google的uiautomator(只能用java),uiautomator2可以使用脚本语言python进行编写,更简单直观地修改.运行自动化测试代码: 不足为:仅支 ...