Sql-Server
不同數據庫中的過濾器需要 1 個數據庫中的表中的數據
我有一個使用 4 個單獨數據庫的 Win Form、Data Entry、應用程序。這是一個偶爾連接的應用程序,它使用合併複製 ( SQL 2005 ) 保持同步。這工作得很好。我要解決的下一個障礙是在我的出版物中添加過濾器。
現在,我們正在向 150 個訂閱者中的每一個複制 70mbs 壓縮包,而事實上,他們只需要其中的一小部分。使用過濾器我可以做到這一點(見下面的程式碼),但我必須製作一個映射表才能做到這一點。此映射表由 3 列組成。PrimaryID(Guid)、WorkerName(varchar) 和 ClientID(int)。
問題是我需要所有四個數據庫中都存在此表才能將其用於過濾器,因為據我所知,過濾器語句中不允許視圖或跨數據庫查詢。
我有哪些選擇?
似乎我會將其設置為在 1 個數據庫中維護,然後使用觸發器在其他 3 個數據庫中保持更新。為了成為過濾器的一部分,我必須將該表包含在複製集中,所以我該如何適當地標記它。
有更好的方法嗎?
SELECT <published_columns> FROM [dbo].[tblPlan] WHERE [ClientID] IN (select ClientID from [dbo].[tblWorkerOwnership] where WorkerID = SUSER_SNAME())
這允許您將過濾器連結在一起,下一個在第一個下方,因此它僅從第一個過濾集中提取。
SELECT <published_columns> FROM [dbo].[tblPlan] INNER JOIN [dbo].[tblHealthAssessmentReview] ON [tblPlan].[PlanID] = [tblHealthAssessmentReview].[PlanID]
http://www.sqlservercentral.com/articles/Advanced/designingcrossdatabasequeries/1753/
您可以在視圖中使用跨數據庫查詢。
根據您需要在伺服器上“複製”此過濾器數據的速度,您可以在從屬伺服器上創建一個作業,該作業使用來自主伺服器的數據更新表。您不會像使用觸發器那樣立即獲得更新,但我認為設計會更簡潔。
例如,在伺服器上作為作業執行的跨數據庫查詢,執行一個簡單的
DELETE FROM filterTable
然後
INSERT INTO filterTable ....
以按照您選擇的計劃刷新過濾器中使用的表格。