当前位置:首页 > 数据库 > Sqlserver

SQL Server 跨库同步数据

原文:SQL Server 跨库同步数据

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

技术分享

    

 1createPROCEDURE[dbo].[p_pm_项目平台客户批量同步到报销平台](
 2@destservernvarchar(50),
 3@sourceservernvarchar(50)
 4)
 5AS 6BEGIN 7 8SET NOCOUNT ON;
 9--不存在则添加链接服务器,外部查询必须指明IP地址,例如 select * from [IP].[database].[dbo].[table]10ifnotexists (select*from sys.servers where server_id!=0and data_source=@destserver)
11begin12exec sp_addlinkedserver    @server=@destserver13end14ifnotexists (select*from sys.servers where server_id!=0and data_source=@sourceserver)
15begin16exec sp_addlinkedserver    @server=@sourceserver17end18begin try  
19set xact_abort on20begintransaction21--http://www.cnblogs.com/chnking/archive/2007/04/04/699891.html 22INSERTINTO[192.168.0.10].[dbCRM].[dbo].[t_custom] (客户ID,
2324                                客户名称,
25                                客户简称,
26                                输入码,
27                                查询码,
28                                地址,
29                                录入登录名,
30                                录入时间,
31                                修改登录名,
32                                修改时间,
33                                审批状态ID,
34                                审批状态名称,
35                                是否审批结束,
36                                审批操作时间,
37                                项目管理客商编码,
38                                序号)
39SELECT 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.地址,
44admin,
45getdate(),
46null,
47null,
48D65F87A8-79C8-4D1C-812D-AE4591E056A8,
49已审批,
501,
51                                A.审批操作时间,
52                                A.项目管理客商编码,
53054FROM[dbPM].[dbo].[v_custom] A
55WHERE  A.客户ID NOTIN ( SELECT 客户ID FROM[192.168.0.10].[dbCRM].[dbo].[t_custom]);
56575859----------------------------------存在更新-----------------------------------                                                                60update   A  set61                             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.项目管理客商编码
69from[192.168.0.10].[dbCRM].[dbo].[t_custom] A,[dbPM].[dbo].[v_custom]  B 
70where A.客户ID=B.客户ID;
71727374committransaction75end try 
76begin catch 
77select ERROR_NUMBER() as errornumber,ERROR_MESSAGE() as errormsg,ERROR_LINE() as errorline
78rollbacktransaction79end catch
80END

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

  可以参照如下的配置:

技术分享

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

原文:http://www.cnblogs.com/lonelyxmas/p/5197598.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐