作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将几个表从中央 (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/
我是一名优秀的程序员,十分优秀!