SQL Server 跨库同步数据

最近有个需求是要跨库进行数据同步,两个数据库分布在两台物理计算机上,自动定期同步可以通过SQL Server代理作业来实现,但是前提是需要编写一个存储过程来实现同步逻辑处理。这里的存储过程用的不是opendatasource,而是用的链接服务器来实现的。存储过程创建在IP1:192.168.0.3服务器上,需要将视图v_custom的客户信息同步到IP2:192.168.0.10服务器上的t_custom表中。逻辑是如果不存在则插入,存在则更新字段。

create PROCEDURE [dbo].[p_pm_项目平台客户批量同步到报销平台](
  @destserver nvarchar(50),
  @sourceserver nvarchar(50)
)
AS
BEGIN

  SET NOCOUNT ON;
  --不存在则添加链接服务器,外部查询必须指明IP地址,例如 select * from [IP].[database].[dbo].[table]
  if not exists (select * from sys.servers where server_id!=0 and data_source=@destserver)
  begin
    exec sp_addlinkedserver  @server=@destserver
  end
  if not exists (select * from sys.servers where server_id!=0 and data_source=@sourceserver)
  begin
    exec sp_addlinkedserver  @server=@sourceserver
  end
    begin try
    set xact_abort on
    begin transaction
              INSERT INTO [192.168.0.10].[dbCRM].[dbo].[t_custom] (客户ID,

                客户名称,
                客户简称,
                输入码,
                查询码,
                地址,
                录入登录名,
                录入时间,
                修改登录名,
                修改时间,
                审批状态ID,
                审批状态名称,
                是否审批结束,
                审批操作时间,
                项目管理客商编码,
                序号)
        SELECT A.客户ID,A.客户名称,
                A.客户简称,
                dbo.fn_pm_GetPy(A.客户名称),
                A.客户编号+','+A.客户名称+','+dbo.fn_pm_GetPy(A.客户名称)+','+A.客户简称+','+dbo.fn_pm_GetPy(A.客户简称),
                A.地址,
                'admin',
                getdate(),
                null,
                null,
                'D65F87A8-79C8-4D1C-812D-AE4591E056A8',
                '已审批',
                1,
                A.审批操作时间,
                A.项目管理客商编码,
                0
        FROM  [dbPM].[dbo].[v_custom] A
        WHERE A.客户ID NOT IN ( SELECT 客户ID FROM  [192.168.0.10].[dbCRM].[dbo].[t_custom]);

        ----------------------------------存在更新-----------------------------------
        update  A set
              A.客户名称=B.客户名称,
              A.客户简称=B.客户简称,
              A.输入码=dbo.fn_pm_GetPy(B.客户名称),
              A.查询码=B.客户编号+','+B.客户名称+','+dbo.fn_pm_GetPy(B.客户名称)+','+B.客户简称+','+dbo.fn_pm_GetPy(B.客户简称),
              A.地址=B.地址,
              A.修改登录名='admin',
              A.修改时间=getdate(),
              A.项目管理客商编码 =B.项目管理客商编码
          from [192.168.0.10].[dbCRM].[dbo].[t_custom] A,[dbPM].[dbo].[v_custom] B
          where A.客户ID=B.客户ID;

      commit transaction
    end try
    begin catch
      select ERROR_NUMBER() as errornumber,ERROR_MESSAGE() as errormsg,ERROR_LINE() as errorline
      rollback transaction
    end catch
END

  如果没有正确配置,经常会出现 消息 7391,级别 16,状态 2,过程 xxxxx,第 XX 行 。无法执行该操作,因为链接服务器 "xxxxx" 的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务。

  可以参照如下的配置:

以上就是SQL Server 跨库同步数据的实现方法,希望对大家的学习有所帮助。

(0)

相关推荐

  • SqlServer2005 数据库同步配置图文详解

    <1>软件准备条件 机器A端:SqlServer2005 Management Studio + WinServer 2003 Enterprise (作为发布服务器) 机器B端:Sqlserver2005 Management Studio Express + WinXP(作为订阅服务器) 一:[准备条件] <1>软件准备条件 机器A端:SqlServer2005 Management Studio + WinServer 2003 Enterprise (作为发布服务器) 机器

  • 使用Sqlserver事务发布实现数据同步(sql2008)

    事务的功能在sqlserver中由来已久,因为最近在做一个数据同步方案,所以有机会再次研究一下它以及快照等,发现还是有很多不错的功能和改进的.这里以sqlserver2008的事务发布功能为例,对发布订阅的方式简要介绍一下操作流程,一方面做个总结备份,一方面与大家进行一下分享和交流.费话就不多说了,进入一下今天的正题:) 这里要说明一下环境:首先我在本地局域网内有两台安装有sqlserver2008的机器(注意:已发布的快照版本无法向老版本数据库兼容,意味着2008下创建的事务或快照发布,无法被

  • SQL Server双服务器架设并数据自动同步教程

    交待:使用的软硬件环境为Win XP SP2.SQL Server 2000 SP2个人版.普通双核台式机.1000M局域网,A机为已使用的服务器,上面已有数据库和海量数据,B机为此次新架服务器,两机登陆方式均为sql server身份验证模式,其它设置均为默认设置,无特别.A机上另有FTP服务器,用于程序自动更新. 1.在A机上执行数据库备份. 2.用A机上备份下来的数据库备份文件在B机上执行数据库恢复,保证A.B机均有完全相同的数据库.(弄完后发现这上步好像不用做,反正发现时我已经弄完了,也

  • SqlServer2008 数据库同步的两种方式(发布、订阅使用方法)

    上篇中说了通过SQL JOB的方式对数据库的同步,这一节作为上一节的延续介绍通过发布订阅的方式实现数据库之间的同步操作.发布订阅份为两个步骤:1.发布.2订阅.首先在数据源数据库服务器上对需要同步的数据进行发布,然后在目标数据库服务器上对上述发布进行订阅.发布可以发布一张表的部分数据,也可以对整张表进行发布.下面分别介绍发布.订阅的过程. 1.发布.发布需要用实际的服务器名称,不能使用服务器的IP地址进行.能发布的信息包括[表].[存储过程].[用户函数]如果使用IP会有错误,如下图: 具体发布

  • 通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数据库服务器,备份服务器只在主服务器出现故障时投入使用.它是一种优于文件备份的数据库备份解决方案. 在选择数据库同步备份解决方案时,我们评估了两种方式:SQL Server 2008的数据库镜像和SQL Server 2008数据库复制.数据库镜像的优点是系统能自动发现主服务器故障,并且自动切换至镜像

  • SQL Server 2005 镜像构建手册(sql2005数据库同步镜像方案)

    一. 镜像简介 1. 简介 数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个SQL Server数据库中.镜像不能直接访问;它只用在错误恢复的情况下才可以被访问. 要进行数据库镜像所需的最小需求包括了两个不同的SQL Server运行环境.主服务器被称为"主机",第二个服务器被称作"备机".主机数据库就是你实际用着的数据库,镜像数据库就是你的数据库的备用拷贝.当事务写入你的基本服务器的时候,他们也同样被传送到并

  • SQLServer 2000 数据库同步详细步骤[两台服务器]

    为什么要同步SQL Server 2000 数据库,它都用在什么场合 SQL Server 2000 数据库同步配置的原理 从0开始一步一步配置SQL Server 2000 数据库同步,非常细 已经非常熟练,可以看精品版SQL Server 2000 数据库同步配置 配置SQL Server 2000 数据库同步时的 常见问题 为什么要同步SQL Server 2000 数据库,它都用在什么场合 数据实时备份同步,数据库服务器出问题时我们也有其正常工作时的备份 数据实时备份同步,一台服务器负载

  • sqlserver 2000数据库同步 同步两个SQLServer数据库的内容

    复制前要做好的准备工作: 1.发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户 我的电脑 控制面板 管理工具 计算机管理 用户和组 右键用户 新建用户 建立一个隶属于administrator组的登陆windows的用户 2.在发布服务器上,新建一个共享目录,做为发布的快照文件的存放目录,操作: 我的电脑 D:\ 新建一个目录,名为: PUB 右键这个新建的目录 属性 共享 选择"共享该文件夹" 通过"权限"

  • SQLServer2005与SQLServer2008数据库同步图文教程

    1,复制简介 简单的说,复制是获取一个或多个数据库的过程,它系统的针对出入不同数据库的数据,提供基于规则的拷贝机制. 复制分为三种角色, 1,发布服务器 发布服务器可以被看成是源数据库. 2 ,分发服务器 分发数据库针对更改而承担类似某些票据交换所的工作,他是一个特殊的分发数据库,用于对更改进行跟踪,同时也跟踪哪些订阅服务器已经收到了这些更改.除此之外,它还跟踪任何同步过程的结果,并知道发生了哪些必须解决的冲突. 3,订阅服务器 任何参与到于复制发布过程的数据库,订阅服务器并不只能接受数据,它还

  • SQLServer 跨库查询实现方法

    本文给出一条 SQL 语句用于展示在同一名服务器上,不同的数据库间查询,注意当前连接用户要对两个库都有权限SQL Server 中 SQL 语句中对象的完整表达式是: [DatabaseServer].[DatabaseName].[DatabaseSchema].[DatabaseObject] 本文给出一条 SQL 语句用于展示在同一名服务器上,不同的数据库间查询,注意当前连接用户要对两个库都有权限. 复制代码 代码如下: select * from CfteaDb1.dbo.CfteaTa

随机推荐