需要对 1 个数据库中的表的数据进行过滤

需要对 1 个数据库中的表的数据进行过滤

我有一个 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 ....

按照您选择的时间表刷新过滤器中使用的表格。

相关内容