[英]Can SQL Server Replication include the source dbid in the replicated data?
假設我有帶有TableA的DatabaseA,它具有以下字段:Id,Name。
在另一個數據庫DatabaseB中,我具有具有以下字段的TableA:DatabaseId,Id,Name。
是否可以設置將發送以下內容的復制發布:
DatabaseA.dbid,DatabaseA.TableA.Id,DatabaseA.TableA.Name
到DatabaseB.TableA?
編輯:我要問的原因是我需要將多個數據庫(具有相同的架構)組合到一個數據庫中,並且延遲盡可能短。 復制似乎是一個很好的起點(需要將數據從一個地方復制到另一個地方),但我只是處於頭腦風暴階段。 我一定會對在不使用復制的情況下完成此操作的建議持開放態度。
您是從多個來源在一處匯總這些事件嗎? 復制僅來自一個源,它是一對一的,因此源ID似乎沒有多大意義。
如果您要匯總來自多個源的數據,也許鏈接服務器和觸發器是一個更好的選擇,並且確實如此,那么您絕對可以包括有關所需源的任何信息。
如果您可以澄清問題以描述目的,則有助於我們找到最佳解決方案。
問題的最新詳細信息:
這個解決方案聽起來像您所需要的嗎?
您可以根據需要調整檢查/合並過程在服務器上運行的頻率(甚至不斷運行它以處理出現的新行,甚至還可以在該表上使用AFTER觸發器)。
可能有一種更簡單的方法,但是我想到的第一件事是將TableA包裝在源數據庫的索引視圖中,然后將該視圖復制為表(即,type =“基於日志的索引視圖”)。 不過,我認為這不適用於合並復制。
因此,大致類似於:
CREATE VIEW TableA_with_dbid WITH SCHEMABINDING AS
SELECT DatabaseA.dbid, Id, Name FROM TableA
CREATE UNIQUE CLUSTERED INDEX ON TableA_with_dbid (Id) -- or whatever your PK is
EXEC sp_addarticle ...,
@source_object = 'TableA_with_dbid',
@destination_table = 'TableA',
@type = 'indexed view logbased',
...
大告誡:索引視圖有很多要求可能不適用於您的應用程序。 例如,每次更新基表時都必須設置某些選項。
(響應您問題中的編輯...)這不適用於將多個源合並到一個表中。 AFAIK,一個訂閱數據庫中的對象只能來自一篇已發表的文章。 而且,由於在索引視圖中不允許使用UNION,因此無法在訂閱方建立索引視圖。 (文檔未明確禁止使用UNION ALL,但這並不會讓我感到驚訝。為防萬一,您可以嘗試一下。)但是它仍然可以回答您的明確問題:dbid位於復制表中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.