RDA 限制

Microsoft SQL Server Compact 3.5 中的远程数据访问 (RDA) 在以下方面受到限制:

  • 区分大小写。从 SQL Server Compact 3.5 Service Pack 1 版本开始,SQL Server Compact 支持在数据库级别上设置区分大小写的排序规则。但是,在 SQL Server Compact 数据库中不将对象名称(如表名)、语言关键字、函数和视图视为区分大小写,即使排序规则区分大小写。

    对象在 SQL Server Compact 数据库中的处理方式不同于在 SQL Server 数据库中的处理方式。例如,在区分大小写的 SQL Server 数据库中,MYTABLE 和 mytable 这两个表将被视为不同的对象。在 SQL Server Compact 数据库中,相同的表名将导致命名冲突。相反,在 SQL Server Compact 中 MYVALUE 和 myvalue 这两个值不再导致主键冲突,因为它们被视为不同的值。 在区分大小写的 SQL Server 数据库中它们也不会导致冲突。 

  • ROWGUID。使用 RDA 从同时参与服务器复制的 SQL Server 表中请求数据时,必须排除具有 ROWGUIDCOL 属性的系统列。默认情况下,此列的名称为**“RowGuid”**。

    例如,对于 Pull 方法中的 SQLSelectString 参数,应使用 SELECT CompanyName, ContactName FROM Customers,而非 SELECT * FROM Customers。

  • 触发器。SQL Server Compact 3.5 不支持触发器。但是,触发器可以驻留在 RDA 从中请求数据的 SQL Server 表上。对于跟踪的表,在将更改推送回 SQL Server 时,可以执行 SQL Server 触发器。您可能必须在触发器逻辑中指定 SET NOCOUNT ON。它指示不返回受影响的行数,因为“没有受影响的行”的响应会导致 RDA Push 方法错误。

  • 表和列。对于跟踪的表,可用的列数为 1017 列(1024 减去 7 个系统列)。这 7 个系统列将受到保护,用于跟踪的 RDA 表。

  • 计算列。如果记录集中包含计算列,Pull 方法将会失败。

  • IDENTITY 列。如果您使用 IDENTITY 列来生成唯一性,RDA 将无法动态管理 IDENTITY 列。设备上 IDENTITY 列的默认起始值始终为“种子=1”、“增量=1”。SQL Server Compact 3.5 允许您使用 ALTER TABLE 语句修改本地数据库表中的标识 SEED 和标识 INCREMENT 值。这样您就可以手动管理各个设备的标识范围。在试图向表中执行任何插入操作之前,必须确定最大 IDENTITY 值并调整种子值。例如,如果确定最大 IDENTITY 值为 99,则使用 ALTER TABLE Orders ALTER COLUMN OrderId IDENTITY (100,1) 可将下一 IDENTITY 值重置为 100。

架构限制

SQL Server Compact 3.5 可以跟踪对所得到的 SQL Server Compact 3.5 表的更改。通过指定适当的跟踪选项,SQL Server Compact 3.5 可以跟踪对本地 SQL Server Compact 3.5 表所做的所有插入、更新和删除。随后,应用程序可调用 Push 方法,将这些更改传播回最初的 SQL Server 表中。

由 RDA 跟踪的 Pull 和 Push 方法使用的是乐观并发控制。SQL Server 不会锁定请求的记录。应用程序调用 Push 方法时,对本地 SQL Server Compact 3.5 数据库所做的更改将无条件应用于 SQL Server 数据库。这可能导致 SQL Server 数据库的其他用户所做的更改丢失。

当所要更新的记录已进行逻辑分区且不会发生冲突时,请使用跟踪的 Pull 和 Push 方法。例如,跟踪的 Pull 和 Push 方法可用在现场服务应用程序中,用于跟踪具有唯一服务呼叫列表的各个技术人员。

对于使用跟踪的 Pull 创建的 SQL Server Compact 3.5 表,您可以进行以下架构更改:

  • 更改标识列的种子或增量。

  • 添加或删除 DEFAULT 约束。

  • 添加或删除外键。

  • 添加或删除索引。

  • 删除表。

在处理跟踪的 Pull 时,不能对 SQL Server 表进行以下任何架构更改:

  • 添加、删除或重命名列。

  • 重命名表。

  • 删除主键。

  • 更改数据类型定义。

若要对 SQL Server 表的架构执行这些更改,则必须删除 SQL Server Compact 3.5 表,并重新请求更改的 SQL Server 表。