SQL Server 跨库同步数据

原文:SQL Server 跨库同步数据

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

    

 1 create PROCEDURE [dbo].[p_pm_项目平台客户批量同步到报销平台](
 2     @destserver nvarchar(50),
 3     @sourceserver nvarchar(50)
 4 )
 5 AS
 6 BEGIN
 7
 8     SET NOCOUNT ON;
 9     --不存在则添加链接服务器,外部查询必须指明IP地址,例如 select * from [IP].[database].[dbo].[table]
10     if not exists (select * from sys.servers where server_id!=0  and data_source=@destserver)
11     begin
12         exec sp_addlinkedserver    @server=@destserver
13     end
14     if not exists (select * from sys.servers where server_id!=0  and data_source=@sourceserver)
15     begin
16         exec sp_addlinkedserver    @server=@sourceserver
17     end
18         begin try
19         set xact_abort on
20         begin transaction
21             --http://www.cnblogs.com/chnking/archive/2007/04/04/699891.html
22                 INSERT INTO [192.168.0.10].[dbCRM].[dbo].[t_custom] (客户ID,
23
24                                 客户名称,
25                                 客户简称,
26                                 输入码,
27                                 查询码,
28                                 地址,
29                                 录入登录名,
30                                 录入时间,
31                                 修改登录名,
32                                 修改时间,
33                                 审批状态ID,
34                                 审批状态名称,
35                                 是否审批结束,
36                                 审批操作时间,
37                                 项目管理客商编码,
38                                 序号)
39                 SELECT A.客户ID,A.客户名称,
40                                 A.客户简称,
41                                 dbo.fn_pm_GetPy(A.客户名称),
42                                 A.客户编号+','+A.客户名称+','+dbo.fn_pm_GetPy(A.客户名称)+','+A.客户简称+','+dbo.fn_pm_GetPy(A.客户简称),
43                                 A.地址,
44                                 'admin',
45                                 getdate(),
46                                 null,
47                                 null,
48                                 'D65F87A8-79C8-4D1C-812D-AE4591E056A8',
49                                 '已审批',
50                                 1,
51                                 A.审批操作时间,
52                                 A.项目管理客商编码,
53                                 0
54                 FROM   [dbPM].[dbo].[v_custom] A
55                 WHERE  A.客户ID NOT IN ( SELECT 客户ID FROM   [192.168.0.10].[dbCRM].[dbo].[t_custom]);
56
57
58
59                 ----------------------------------存在更新-----------------------------------
60                 update   A  set
61                             A.客户名称=B.客户名称,
62                             A.客户简称=B.客户简称,
63                             A.输入码=dbo.fn_pm_GetPy(B.客户名称),
64                             A.查询码=B.客户编号+','+B.客户名称+','+dbo.fn_pm_GetPy(B.客户名称)+','+B.客户简称+','+dbo.fn_pm_GetPy(B.客户简称),
65                             A.地址=B.地址,
66                             A.修改登录名='admin',
67                             A.修改时间=getdate(),
68                             A.项目管理客商编码 =B.项目管理客商编码
69                     from  [192.168.0.10].[dbCRM].[dbo].[t_custom] A,[dbPM].[dbo].[v_custom]  B
70                     where A.客户ID=B.客户ID;
71
72
73
74             commit transaction
75         end try
76         begin catch
77             select ERROR_NUMBER() as errornumber,ERROR_MESSAGE() as errormsg,ERROR_LINE() as errorline
78             rollback transaction
79         end catch
80 END

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

  可以参照如下的配置:

 具体可以参看:http://www.cnblogs.com/chnking/archive/2007/04/04/699891.html 

时间: 2024-11-01 17:19:38

SQL Server 跨库同步数据的相关文章

SQL Server 跨库同步数据_MsSql

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

SQL Server跨数据库复制数据

相同结构表不同数据库拷贝数据: insert into 目标数据库名.dbo.表名 select * from 源数据库名.dbo.表名 相同结构表不同数据库拷贝表: select * into 目标数据库名.dbo.表名 from 源数据库名.dbo.表名  留意事项: 在目标数据库中,复制数据的话就必须建立一个相同结构的表,假如不是的话就没必要了: 中间一定要加上dbo,不然是访问不了的:      顺带一提,效率比普通的copy要高的多. 实际上我copy了3w条数据从一个表到另一个表,整

如何在SQL Server 2005中实现数据同步

现在假如有一个这样的应用,有一个游戏服务商在推广一个大型游戏的时候,现在架设了多台数据库服务器,为了数据的便于统计,最终这些数据可以自动的转入到指定存储的另一台服务器中,这时候就会面临着一个这样的问题,如何保证这些多台数据库之间的数据的同步呢? 我们就可以使用复制的办法,复制是将一组数据或数据库对象从一个数据库复制和分发到另外一个数据库,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据.使用复制,可以在局域网和广域网上将数据分发到不同位置,可以确保分布在不同地点的数据自动同步更新,从

C#同步SQL Server数据库中的数据--数据库同步工具[同步已有的有变化的数据]

C#同步SQL Server数据库中的数据--数据库同步工具[同步已有的有变化的数据] 1. C#同步SQL Server数据库Schema 2. C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据] 3. 分析下自己写的SQL Server同步工具的性能和缺陷 接着写数据同步,这次可以把有变化的数据进行更新了: 1.SQL批量更新函数: /// <summary> /// Note: for columns, the first string must be prima

C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]

C#同步SQL Server数据库中的数据 1. 先写个sql处理类: using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Text; namespace PinkDatabaseSync { class DBUtility : IDisposable { private string Server; private string

删除-sql server的个性化同步需求 ?

问题描述 sql server的个性化同步需求 ? 请教一个问题:大家看看这样的需求怎么实现: A数据库,B数据库:要求A上正常的操作增删改查能同步到B上,但是如果在A上操作年结以后,手工脚本删除数据的时候,这个大批量删除的动作要求不能同步到B上.换句话说就是A上的数据只是B上的子集. 这样的需求能实现吗? 大家给给思路呢,谢谢! 解决方案 我能想到的一种方案是 触发器...正常的操作增删改查 的时候 在A上用触发器 插入到B数据库..一旦执行大批量删除动作的时候 在头部加上关闭触发器..执行完

Sql Server中清空所有数据表中的记录_MsSql

Sql Server中清空所有数据表中的记录 清空所有数据表中的记录: 复制代码 代码如下: exec sp_msforeachtable  @Command1 ='truncate table ?' 删除所有数据表: 复制代码 代码如下: exec sp_msforeachtable 'delete   N''?''' 清空SQL Server数据库中所有表数据的方法(有约束的情况) 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之

SQL Server+Hadoop 变身大数据解决方案

文章讲的是SQL Server+Hadoop 变身大数据解决方案,在数据库市场中,微软的SQL Server是最受关注的产品之一.在数据库知识网站DB-Engines每月公布的数据库流行度排行榜中,SQL Server几乎稳占第二名的位置.但从这个榜单每月的变化中也可以看出,大量NoSQL数据库的排名不断上升,已经开始威胁到传统数据库的地位. "以不变应万变"不再是大数据时代应有的策略,老牌数据库厂商在保持传统市场领先的基础上,不断拓展新市场,微软就是其中的一个代表.微软的改变最早是为

SQL Server各种导入导出数据方式的比较

本文为原创,如需转载,请注明作者和出处,谢谢!本文曾发表于IT168:http://tech.it168.com/db/s/2006-08-02/200608020911005.shtml     当我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新建的数据库中时,尤其是在进行数据检验.净化和转换时,将会面临很大的挑战.幸好SQL Server为我们提供了强大.丰富的数据导入导出功能,并且在导入导出的同时可以对数据进行灵活的处理.     在SQL Server中主要有三