我有一个 Win Form、Data Entry 应用程序,它使用 4 个独立的数据库。这是一个偶尔连接的应用程序,它使用合并复制 (SQL 2005) 保持同步。这工作得很好。我要解决的下一个障碍是向我的出版物添加过滤器。
目前,我们正在将 70mbs 的压缩数据复制到我们的 150 个订阅者中,而事实上,他们只需要其中的一小部分。使用 Filters,我能够实现这一点(参见下面的代码),但我必须创建一个映射表才能做到这一点。该映射表由 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]
答案1
答案2
根据您需要多快在服务器上“复制”此筛选数据,您可以在从属服务器上创建一个作业,使用主服务器的数据更新表。您不会像使用触发器那样立即获得更新,但我认为设计会更简洁。
例如,跨数据库查询作为服务器上的作业执行,执行简单的
DELETE FROM filterTable
进而
INSERT INTO filterTable ....
按照您选择的时间表刷新过滤器中使用的表格。