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?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的SQL Server 跨库同步数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql的常用内置函数
- 下一篇: linux cmake编译源码,linu