模拟三个库(同一个实例中),分别是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. hdu 3003 Pupu

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3003 题目大意:一种动物身上有n种不同的皮肤,每种皮肤有透明很不透明两种状态,经过一天的日晒,透明的可 ...

  2. 【FIRST USE】第一次用git把代码上传到github

    第一次使用某个东西总是充满了伤痛,我第一次用sed的时候,毁掉了我的所有源代码,第一次用git的时候一直提示不正确,后来解决了问题,便记录下来. 首先说明我的环境,我用的是虚拟机,上面运行的64位的c ...

  3. PL/SQL 05 存储过程 procedure

    --存储过程(不带参数) create or replace procedure 存储过程名as  变量.常量声明;begin  代码;end; --存储过程(带输入参数) create or rep ...

  4. [ Openstack ] Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs 高可用集群

    目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...

  5. k8s的DamonSet使用

    Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本.DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本. 1.Daemo ...

  6. 使用bottle进行web开发(6):Response 对象

    Response的元数据(比如http的status code,headers,cookies等,都被i封装到一个叫Response的对象中,并传给浏览器. status code:status co ...

  7. Django基础之模板

    Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }} 和 {% %} 变量相关的用{{ }},逻辑相关的用{% %}. 变量 {{ 变量名 }} 变量名由字母数字和下划线组成 ...

  8. eclipse怎么关闭spring dashboard

    进入help-install new software-what is already installed?-卸载spring board

  9. 提取windows用户明文密码

    前段时间mimikatz热传,主要是因为可以直接提取当前登录用户明文密码. 其实,有个更厉害的神器,无需那么多命令操作,一个命令搞定: C:\>wce -w WCE v1.3beta (Wind ...

  10. HDU 6333.Problem B. Harvest of Apples-组合数C(n,0)到C(n,m)求和-组合数学(逆元)+莫队 ((2018 Multi-University Training Contest 4 1002))

    2018 Multi-University Training Contest 4 6333.Problem B. Harvest of Apples 题意很好懂,就是组合数求和. 官方题解: 我来叨叨 ...