[翻译]关于SQL CE RDA数据同步的FAQ
Q1. 怎么判断用 RDA Pulled 的表是否是被跟踪的?什么是 RDA 订阅表?
A1. 系统表 __sysRDASubscriptions 保存了 RDA 订阅的信息。如果表被拉下来时 tracking 选项打开了(就是 RdaTrackOption.TrackingOn 或 RdaTrackOption.TrackingOnWithIndexes),那么这个表就是 RDA 订阅表。系统表将为它增加一条记录。总之,如果被拉下来的表在 __sysRDASubscriptions 表中有相应的记录,那么它就是被跟踪的。同样,如果表在被拉下来时没有打开 tracking 选项,那么这个表将没有任何 RDA 订阅信息。
Q2. 为什么我会得到“SSCE_M_RESTRICTEDDDL – 28605 - Internal error: DDL operations are not allowed on system tables. [,,,Table name,,]” 错误?这个错误表示什么含义?
A2. 当你用 RDA 拉下一个表,同时设置了 Tracking On 选项(或者当一个表是 RDA 订阅的),对该表的 DDL 操作是受到限制的,所以我们通过从中复制数据的主表来维护架构的完整性。因此,当你尝试对 RDA 订阅表执行 DDL 操作时,你将会遇到这个错误。
Q3. 如何避免“SSCE_M_TABLEALREADYEXISTS – 28573 - The LocalTableName parameter is already specified. [,,,Table name,,]”错误?
A3. 当 RDA 的 Pull 命令参数中,本地表名称或错误表名称所对应的表已经存在时,就会抛出这个错误。有两种方法可以避免这个错误:1)删除引起错误的表 2)改变 RDA Pull 参数。
Q4. 如何避免“Duplicate value cannot be inserted into a unique index. [Table name = __sysRDASubscriptions, Constraint name = c_LocalTableName]”错误?
A4. 在正常情况下,这个错误是不应该发生的。不过有个缺陷可以导致这个错误的出现。关于这个缺陷在 KB Article 920272 中有详细的讨论。如果你正在使用 VS2005 SP1,那么你应该不会再遇到这个错误了。如果你确实遇到了这个错误,那么把所有访问数据库的产品程序文件和客户应用程序放到同一个目录下(比较难理解-_-),最好是 \Windows 目录。
Q5. 如何在执行了 RDA Pull 之后改变 IDENTITY 信息?因为 RDA 不支持标识范围管理(Identity Range Management)。
A5. 虽然用 RDA 拉下来的表是受到 DDL 约束的,但是改变默认值和标识信息是没有受到限制的。你可以使用 ALTER TABLE <Table Name> ALTER COLUMN <Column Name> <int | bigint> IDENTITY(<New Seed>, <New Step>) 语句修改标识信息。
原文:RDA Subscriptions
[名词解释]
RDA:RemoteDataAccess,SQL Server CE 的远程数据访问同步方式。详细介绍看《SQL Server 2005 Mobile Edition 3.0 中的复制和远程数据访问功能的技术对比》
DDL:Data definition language,数据定义语言。
由于本人翻译水平有限,翻译得不当的地方,请参考原文,欢迎大家指正!