SQL Server 跨庫同步資料

來源:互聯網
上載者:User

標籤:

  最近有個需求是要跨庫進行資料同步,兩個資料庫分布在兩台實體電腦上,自動定期同步可以通過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     begin12         exec sp_addlinkedserver    @server=@destserver13     end14     if not exists (select * from sys.servers where server_id!=0  and data_source=@sourceserver)15     begin16         exec sp_addlinkedserver    @server=@sourceserver17     end18         begin try  19         set xact_abort on20         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                                 054                 FROM   [dbPM].[dbo].[v_custom] A55                 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 errorline78             rollback transaction 79         end catch80 END

  如果沒有正確配置,經常會出現 訊息 7391,層級 16,狀態 2,過程 xxxxx,第 XX 行 。無法執行該操作,因為連結的伺服器 "xxxxx" 的 OLE DB 提供者 "SQLNCLI" 無法啟動分散式交易。

  可以參照如下的配置:

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

SQL Server 跨庫同步資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.