当前位置:Gxlcms > mssql > SQLServer跨库同步数据

SQLServer跨库同步数据

时间:2021-07-01 10:21:17 帮助过:108人阅读

最近有个需求是要跨库进行数据同步,两个数据库分布在两台物理计算机上,自动定期同步可以通过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. SET NOCOUNT ON;
  8. --不存在则添加链接服务器,外部查询必须指明IP地址,例如 select * from [IP].[database].[dbo].[table]
  9. if not exists (select * from sys.servers where server_id!=0 and data_source=@destserver)
  10. begin
  11. exec sp_addlinkedserver @server=@destserver
  12. end
  13. if not exists (select * from sys.servers where server_id!=0 and data_source=@sourceserver)
  14. begin
  15. exec sp_addlinkedserver @server=@sourceserver
  16. end
  17. begin try
  18. set xact_abort on
  19. begin transaction
  20. INSERT INTO [192.168.0.10].[dbCRM].[dbo].[t_custom] (客户ID,
  21. 客户名称,
  22. 客户简称,
  23. 输入码,
  24. 查询码,
  25. 地址,
  26. 录入登录名,
  27. 录入时间,
  28. 修改登录名,
  29. 修改时间,
  30. 审批状态ID,
  31. 审批状态名称,
  32. 是否审批结束,
  33. 审批操作时间,
  34. 项目管理客商编码,
  35. 序号)
  36. SELECT A.客户ID,A.客户名称,
  37. A.客户简称,
  38. dbo.fn_pm_GetPy(A.客户名称),
  39. A.客户编号+','+A.客户名称+','+dbo.fn_pm_GetPy(A.客户名称)+','+A.客户简称+','+dbo.fn_pm_GetPy(A.客户简称),
  40. A.地址,
  41. 'admin',
  42. getdate(),
  43. null,
  44. null,
  45. 'D65F87A8-79C8-4D1C-812D-AE4591E056A8',
  46. '已审批',
  47. 1,
  48. A.审批操作时间,
  49. A.项目管理客商编码,
  50. 0
  51. FROM [dbPM].[dbo].[v_custom] A
  52. WHERE A.客户ID NOT IN ( SELECT 客户ID FROM [192.168.0.10].[dbCRM].[dbo].[t_custom]);
  53. ----------------------------------存在更新-----------------------------------
  54. update A set
  55. A.客户名称=B.客户名称,
  56. A.客户简称=B.客户简称,
  57. A.输入码=dbo.fn_pm_GetPy(B.客户名称),
  58. A.查询码=B.客户编号+','+B.客户名称+','+dbo.fn_pm_GetPy(B.客户名称)+','+B.客户简称+','+dbo.fn_pm_GetPy(B.客户简称),
  59. A.地址=B.地址,
  60. A.修改登录名='admin',
  61. A.修改时间=getdate(),
  62. A.项目管理客商编码 =B.项目管理客商编码
  63. from [192.168.0.10].[dbCRM].[dbo].[t_custom] A,[dbPM].[dbo].[v_custom] B
  64. where A.客户ID=B.客户ID;
  65. commit transaction
  66. end try
  67. begin catch
  68. select ERROR_NUMBER() as errornumber,ERROR_MESSAGE() as errormsg,ERROR_LINE() as errorline
  69. rollback transaction
  70. end catch
  71. END

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

  可以参照如下的配置:

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

您可能感兴趣的文章:

  • SQLServer 跨库查询实现方法
  • MSSQLSERVER跨服务器连接(远程登录)的示例代码
  • SQL Server实现跨库跨服务器访问的方法

人气教程排行