SQL Server 跨数据库事务

 
模拟三个库(同一个实例中),分别是DB1、DB2、DB3
整个事务的业务如下:
1、DB1写入表数据
2、DB2写入表数据
3、DB3调用存储过程写入表数据
4、每次写入表数据间隔模拟抛异常流程,查看数据是否回滚
 
 
代码如下:
 
BEGIN TRY
 
    BEGIN TRAN
        INSERT INTO DB1.dbo.Log
                TypeMessageStackCreated )
        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
 
 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值