SQL Server 跨庫同步數(shù)據(jù)
最近有個(gè)需求是要跨庫進(jìn)行數(shù)據(jù)同步,兩個(gè)數(shù)據(jù)庫分布在兩臺(tái)物理計(jì)算機(jī)上,自動(dòng)定期同步可以通過SQL Server代理作業(yè)來實(shí)現(xiàn),但是前提是需要編寫一個(gè)存儲(chǔ)過程來實(shí)現(xiàn)同步邏輯處理。這里的存儲(chǔ)過程用的不是opendatasource,而是用的鏈接服務(wù)器來實(shí)現(xiàn)的。存儲(chǔ)過程創(chuàng)建在IP1:192.168.0.3服務(wù)器上,需要將視圖v_custom的客戶信息同步到IP2:192.168.0.10服務(wù)器上的t_custom表中。邏輯是如果不存在則插入,存在則更新字段。
create PROCEDURE [dbo].[p_pm_項(xiàng)目平臺(tái)客戶批量同步到報(bào)銷平臺(tái)]( @destserver nvarchar(50), @sourceserver nvarchar(50) ) AS BEGIN SET NOCOUNT ON; --不存在則添加鏈接服務(wù)器,外部查詢必須指明IP地址,例如 select * from [IP].[database].[dbo].[table] if not exists (select * from sys.servers where server_id!=0 and data_source=@destserver) begin exec sp_addlinkedserver @server=@destserver end if not exists (select * from sys.servers where server_id!=0 and data_source=@sourceserver) begin exec sp_addlinkedserver @server=@sourceserver end begin try set xact_abort on begin transaction INSERT INTO [192.168.0.10].[dbCRM].[dbo].[t_custom] (客戶ID, 客戶名稱, 客戶簡稱, 輸入碼, 查詢碼, 地址, 錄入登錄名, 錄入時(shí)間, 修改登錄名, 修改時(shí)間, 審批狀態(tài)ID, 審批狀態(tài)名稱, 是否審批結(jié)束, 審批操作時(shí)間, 項(xiàng)目管理客商編碼, 序號(hào)) SELECT A.客戶ID,A.客戶名稱, A.客戶簡稱, dbo.fn_pm_GetPy(A.客戶名稱), A.客戶編號(hào)+','+A.客戶名稱+','+dbo.fn_pm_GetPy(A.客戶名稱)+','+A.客戶簡稱+','+dbo.fn_pm_GetPy(A.客戶簡稱), A.地址, 'admin', getdate(), null, null, 'D65F87A8-79C8-4D1C-812D-AE4591E056A8', '已審批', 1, A.審批操作時(shí)間, A.項(xiàng)目管理客商編碼, 0 FROM [dbPM].[dbo].[v_custom] A WHERE A.客戶ID NOT IN ( SELECT 客戶ID FROM [192.168.0.10].[dbCRM].[dbo].[t_custom]); ----------------------------------存在更新----------------------------------- update A set A.客戶名稱=B.客戶名稱, A.客戶簡稱=B.客戶簡稱, A.輸入碼=dbo.fn_pm_GetPy(B.客戶名稱), A.查詢碼=B.客戶編號(hào)+','+B.客戶名稱+','+dbo.fn_pm_GetPy(B.客戶名稱)+','+B.客戶簡稱+','+dbo.fn_pm_GetPy(B.客戶簡稱), A.地址=B.地址, A.修改登錄名='admin', A.修改時(shí)間=getdate(), A.項(xiàng)目管理客商編碼 =B.項(xiàng)目管理客商編碼 from [192.168.0.10].[dbCRM].[dbo].[t_custom] A,[dbPM].[dbo].[v_custom] B where A.客戶ID=B.客戶ID; commit transaction end try begin catch select ERROR_NUMBER() as errornumber,ERROR_MESSAGE() as errormsg,ERROR_LINE() as errorline rollback transaction end catch END
如果沒有正確配置,經(jīng)常會(huì)出現(xiàn) 消息 7391,級(jí)別 16,狀態(tài) 2,過程 xxxxx,第 XX 行 。無法執(zhí)行該操作,因?yàn)殒溄臃?wù)器 "xxxxx" 的 OLE DB 訪問接口 "SQLNCLI" 無法啟動(dòng)分布式事務(wù)。
可以參照如下的配置:
以上就是SQL Server 跨庫同步數(shù)據(jù)的實(shí)現(xiàn)方法,希望對(duì)大家的學(xué)習(xí)有所幫助。
- SQL Server實(shí)時(shí)同步更新遠(yuǎn)程數(shù)據(jù)庫遇到的問題小結(jié)
- SqlServer2008 數(shù)據(jù)庫同步的兩種方式(發(fā)布、訂閱使用方法)
- 通過SQL Server 2008數(shù)據(jù)庫復(fù)制實(shí)現(xiàn)數(shù)據(jù)庫同步備份
- SQL Server 2005 鏡像構(gòu)建手冊(cè)(sql2005數(shù)據(jù)庫同步鏡像方案)
- 深入SqlServer2008 數(shù)據(jù)庫同步的兩種方式(Sql JOB)的分析介紹
- 使用Sqlserver事務(wù)發(fā)布實(shí)現(xiàn)數(shù)據(jù)同步(sql2008)
- SQL Server兩表數(shù)據(jù)同步的多種方法詳解
相關(guān)文章
SQL語句中的DDL類型的數(shù)據(jù)庫定義語言操作
這篇文章主要介紹了SQL語句中的DDL類型的數(shù)據(jù)庫定義語言,主要是用來定義數(shù)據(jù)庫中的對(duì)象的,例如數(shù)據(jù)庫、表和字段的定義,簡單的理解就是DDL語言是來操作數(shù)據(jù)庫、表和字段的,需要的朋友可以參考下2022-08-08SQL語言查詢基礎(chǔ):連接查詢 聯(lián)合查詢 代碼
SQL語言查詢基礎(chǔ):連接查詢 聯(lián)合查詢 代碼...2007-03-03由于系統(tǒng)錯(cuò)誤 126 (SQL Server),指定驅(qū)動(dòng)程序無法加載
今天下午在給客戶安裝用友T3標(biāo)準(zhǔn)版時(shí)碰到一個(gè)非常棘手的問題,MSDE2000數(shù)據(jù)庫和用友T3軟件都安裝好了,但是打開系統(tǒng)管理的時(shí)候提示:AUTOMATION錯(cuò)誤,然后將數(shù)據(jù)庫徹底卸載干凈,用友通T3軟件也徹底卸載干凈,重新安裝了一下,仍然是這個(gè)情況2021-03-03SQLSERVER簡單創(chuàng)建DBLINK操作遠(yuǎn)程服務(wù)器數(shù)據(jù)庫的方法
這篇文章主要介紹了SQLSERVER簡單創(chuàng)建DBLINK操作遠(yuǎn)程服務(wù)器數(shù)據(jù)庫的方法,涉及SQLSERVER數(shù)據(jù)庫的簡單設(shè)置技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06sql根據(jù)表名獲取字段及對(duì)應(yīng)說明
sql根據(jù)表名獲取字段及對(duì)應(yīng)說明,需要的朋友可以參考下。2010-09-09SQL 中sp_executesql存儲(chǔ)過程的使用幫助
建議使用 sp_executesql 而不要使用 EXECUTE 語句執(zhí)行字符串。支持參數(shù)替換不僅使 sp_executesql 比 EXECUTE 更通用,而且還使 sp_executesql 更有效,因?yàn)樗傻膱?zhí)行計(jì)劃更有可能被 SQL Server 重新使用。2011-04-04