SQL Server 跨庫同步數據

来源:http://www.cnblogs.com/isaboy/archive/2016/02/18/sql_server_job.html
-Advertisement-
Play Games

最近有個需求是要跨庫進行數據同步,兩個資料庫分佈在兩台物理電腦上,自動定期同步可以通過SQL Server代理作業來實現,但是前提是需要編寫一個存儲過程來實現同步邏輯處理。這裡的存儲過程用的不是opendatasource,而是用的鏈接伺服器來實現的。存儲過程創建在IP1:192.168.0.3服


  最近有個需求是要跨庫進行數據同步,兩個資料庫分佈在兩台物理電腦上,自動定期同步可以通過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 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 主要是對項目中用過的 oracle 函數進行總結,並做出目錄,方便後續項目是快速查找,提高效率。 01.Round (數值的四捨五入) 描述:傳回一個數值,該數值是按照指定的小數位元數進行四捨五入運算的結果。 SELECT Round(Number,[Decimal_Places])FROM Dua
  • 2張數據表:訂單Order,訂單進度OrderProgress 設計思路一、 1.Order:oid,userid,postInfo,isDel 2.OrderProgress:opId,oid,createTime,PayTime,isDel 這麼設計,oid做外鍵,當拿到一個Order對象,在M
  • 有時,為了讓應用程式運行得更快,所做的全部工作就是在這裡或那裡做一些很小調整。但關鍵在於確定如何進行調整!遲早您會遇到這種情況:應用程式中的 SQL 查詢不能按照您想要的方式進行響應。它要麼不返回數據,要麼耗費的時間長得出奇。如果它降低了企業應用程式的速度,用戶必須等待很長時間。用戶希望應用程式響應
  • 概述 本章節主要介紹配置HaProxy+Keepalived高可用群集,Mycat的配置就不在這裡做介紹,可以參考我前面寫的幾篇關於Mycat的文章。 部署圖: 配置 HaProxy安裝 181和179兩台伺服器安裝haproxy的步驟一致 --創建haproxy用戶 useradd haproxy
  • 最近看到有部分人MongoDB安裝之後總是啟動不起來,在這裡,寫了一個簡單的搭建教程 直接進入正題 1.mongoDB下載地址 https://www.mongodb.org/downloads#production 2.安裝 預設安裝目錄在 C:\Program Files\MongoDB\ 中,
  • Memcached是一個高併發的記憶體鍵值對緩存系統,它的主要作用是將資料庫查詢結果,內容,以及其它一些耗時的計算結果緩存到系統記憶體中,從而加速Web應用程式的響應速度。 Memcached最開始是作為Linux應用程式被安裝在Linux伺服器上來使用的,不過自從開源之後,它又被重新編譯以適用於Win
  • 1、oracel 查看表空間使用情況。 SELECT SUM(bytes) / (1024 * 1024) AS free_space, tablespace_name FROM dba_free_space GROUP BY tablespace_name; SELECT a.tablespace...
  • 索引下推整個思路如下: To see how this optimization works, consider first how an index scan proceeds when Index Condition Pushdown is not used: Get the next row,
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...