gpt4 book ai didi

c# - 如何只同步数据库中的某些行

转载 作者:行者123 更新时间:2023-11-30 16:57:07 25 4
gpt4 key购买 nike

我正在尝试将几个表从中央 (sql-server) 数据库 dbA 同步到本地 (sql-ce) 客户端数据库 dbB。为此,我打算使用 Microsoft 同步框架。我已经设法让它工作到同步某些指定表中的所有行(或更新的行)。

但是,我的 dbA 包含的数据非常多,而且还在不断增长,所以我不希望客户在他们的数据库中拥有 dbA 的完整副本本地数据库。相反,我只希望它们拥有数据库的某些部分(某些行取决于某些表达式,例如从 tableA 中选择 moduleId = 4 的行)

所以最初我认为过滤器 似乎适合我。特别是基于参数的过滤器,我可以在其中为过滤器指定一个参数。然而,经过一些调查后发现,在创建基于参数的过滤器时,您实际上只是在创建一个模板,然后从中创建不同的范围。

我无法准确描述我的应用程序的功能,但您几乎可以将其视为版本处理系统,参数将代表我要从中选择的版本。所以你可以看到它会变成大量的作用域。

那么最后,我的选择是什么?

最佳答案

您是否可以为过滤器参数使用 SQL 函数,以便改变它?

有点像

serverTemplate.Tables["tableA"].AddFilterColumn("ModuleId");
serverTemplate.Tables["tableA"].FilterClause = "[side].[ModuleId] = sf_GetCurrentModule()";

您可以创建一个 SQL 函数 sf_GetCurrentModule() 来返回要同步的 ModuleId。如果要同步的行因客户端而异,则每个客户端至少需要一个同步范围 - 这不是问题,只需为范围使用唯一名称,并可能将客户端的 id 传递给函数:

serverTemplate.Tables["tableA"].FilterClause = string.Format("[side].[ModuleId] = sf_GetCurrentModule({0})", ClientId);

因此您可以根据客户端返回要同步的 ModuleId。

希望这对您有所帮助。

特拉维斯

关于c# - 如何只同步数据库中的某些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26996754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com