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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM