3 RDA局限性
SQL Mobile的RDA主要有下面的几个限制:
1) 在使用RDA的Pull方法从SQL Server数据库中复制数据时,SQL语句不能使用*号代替数据字段,也就是说,我们应该将SQL语句写成“SELECT CompanyName, ContactName FROM Customers”,而不是“SELECT * FROM Customers”。
2) SQL Mobile不支持触发器。
3) 如果需要跟踪数据表的改变,数据表中字段的个数作为为1017(1024个字段减去七个系统字段),那七个系统字段用于跟踪RDA数据的变化。
4) 如果Pull方法的SQL语句中包括Computed column,方法调用将失败。
5) 如果SQL Server数据表中包含IDENTITY字段。RDA无法自动管理IDENTITY字段,因为IDENTITY字段默认起始值是1,每次增量为1。可是在多个SQL Mobile数据库执行RDA的情况下,不同数据子集插入记录的IDENTITY字段可能相同。所以我们必须手工处理可能的冲突。我们可以通过“ALTER TABLE”SQL语句来修改数据表的“SEED”和“INCREMENT”的值。
例如,SQL Server数据表中最大的IDENTITY值为99,我们执行下面的SQL语句,再次插入记录时,IDENTITY值将为100。
6) 对于SQL Mobile本地表结构改变,从上边的例子可以看到,我们可以对Pull方法产生的本地数据表schema进行一些改变。比如,改变数据表IDENTITY字段的初始值和增长量。除此之外,我们还可以添加或删除字段的默认值约束、添加或删除外键、添加或删除索引,以及删除表。这些操作是不会影响RDA的Push方法正常执行的。
但是,我们不能进行诸如增加、删除字段或修改字段名称、修改表名称、删除主键、改变数据类型定义等操作。这些Schema的改变将造成Push方法不能正常执行。
当这些Schema改变之后,我们必须删除这些SQL Mobile数据表,通过Pull方法再次获得该数据表。