Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » MobiLink - 入门 » MobiLink 技术简介 » MobiLink 模型 » 模型模式

 

修改下载子集

每个 MobiLink 远程数据库都可以同步统一数据库中的数据子集。可以为每个表自定义下载子集。

下载子集选项为:

  • 用户   选择此选项可按 MobiLink 用户名对数据进行分区,这样会将不同的数据下载到不同的已注册 MobiLink 用户。

    要使用此选项,MobiLink 用户名必须在统一数据库上。您可在部署时选择 MobiLink 用户名,以便选择与统一数据库上现有值匹配的名称。(用于 MobiLink 用户名的列所属的类型必须支持您用于用户名的值。)如果 MobiLink 用户名不在您进行子集划分的表中,则必须连接其所在的表。

  • 远程   选择此选项可按远程 ID 对数据进行分区,这样会将不同的数据下载到不同的远程数据库。

    要使用此选项,远程 ID 必须在您的统一数据库上。缺省情况下,会将远程 ID 创建为 GUID,但可对远程 ID 进行设置,使其匹配统一数据库上的现有值。(用于远程 ID 的列所属的类型必须支持您用于远程 ID 的值。)如果远程 ID 不在您进行子集划分的表中,则必须连接其所在的表。

  • 自定义   选择此选项可使用 SQL 表达式,以确定下载哪些行。每个同步仅下载 SQL 表达式为 true 的那些行。此 SQL 表达式与 download_cursor 脚本中所使用的表达式相同。部分是为您生成。

♦  更改下载子集
  1. 在 [模型] 模式中打开 [映射] 选项卡。

  2. 在 [表映射] 窗格中选择一个远程表。

  3. 在 [下载子集] 下拉列表中,选择以下下载子集之一:[]、[用户]、[远程] 或 [自定义]。

  4. 如果选择 [用户]、[远程] 或 [自定义],请打开下部窗格中的 [下载子集] 选项卡。

  5. 如果选择 [用户] 或 [远程],则可以利用 [下载子集] 选项卡来标识统一表中包含 MobiLink 用户名或远程 ID 的列,或者输入表连接以获取 MobiLink 用户名或远程 ID。

  6. 如果选择 [自定义],则 [下载子集] 选项卡有两个文本框,您可以向其中添加信息以构造 download_cursor 脚本。不必编写完整的 download_cursor。只需添加额外信息以标识下载子集上的连接和其它限制即可。

    • 如果您的 download_cursor 脚本需要到其它表的连接,可在第一个文本框([要添加到下载游标的 FROM 子句中的表])中输入表名。如果连接需要多个表,则用逗号分隔它们。

    • 在第二个文本框([要在下载游标的 WHERE 子句中使用的 SQL 表达式])中,输入指定连接和下载子集的 WHERE 条件。

另请参见
示例(用户)

例如,CustDB 中的 ULOrder 表可在用户之间共享。缺省情况下,会将订单指派给创建它们的雇员。但有时另一位雇员需要查看其他雇员所创建的订单。例如,经理可能需要查看部门内雇员创建的所有订单。CustDB 数据库可通过 ULEmpCust 表提供这些订单。这样您就可以将客户指派给雇员。他们下载该雇员客户关系的所有订单。

要想知道这是如何完成的,可先查看 ULOrder 的 download_cursor 脚本,但不要下载子集。选择 [映射] 选项卡中的 ULEmpCust 表。为 [下载类型] 列选择 [基于时间戳],为 [下载子集] 列选择 [无]。右击该表并选择 [转到事件]。该表的 download_cursor 脚本如下所示:

SELECT "DBA"."ULOrder"."order_id",
 "DBA"."ULOrder"."cust_id",
 "DBA"."ULOrder"."prod_id",
 "DBA"."ULOrder"."emp_id",
 "DBA"."ULOrder"."disc",
 "DBA"."ULOrder"."quant",
 "DBA"."ULOrder"."notes",
 "DBA"."ULOrder"."status"
FROM "DBA"."ULOrder"
WHERE "DBA"."ULOrder"."last_modified" >= {ml s.last_table_download}

现在,回到 [映射] 选项卡。将 ULOrder 的 [下载子集] 列更改为 [用户]。打开下部窗格中的 [下载子集] 选项卡。选择 [在已连接关系表中使用列]。对要连接的表,选择 ULEmpCust。对要匹配的列,选择 emp_id。连接条件应为 emp_id = emp_id。

在顶部窗格中右击该表并选择 [转到事件]。现在,该表的 download_cursor 脚本如下所示:

SELECT "DBA"."ULOrder"."order_id",
   "DBA"."ULOrder"."cust_id",
   "DBA"."ULOrder"."prod_id",
   "DBA"."ULOrder"."emp_id",
   "DBA"."ULOrder"."disc",
   "DBA"."ULOrder"."quant",
   "DBA"."ULOrder"."notes",
   "DBA"."ULOrder"."status"
FROM "DBA"."ULOrder", "DBA"."ULEmpCust"
WHERE "DBA"."ULOrder"."last_modified" >= {ml s.last_table_download} 
AND "DBA"."ULOrder"."emp_id" = "DBA"."ULEmpCust"."emp_id" 
AND "DBA"."ULEmpCust"."emp_id" = {ml s.username}
示例(自定义)

例如,假设您要按 MobiLink 用户对 Customer 表的下载进行子集划分,并且仅要下载 active=1 的行。而 MobiLink 用户名不在您进行子集划分的表中,因此您需要创建与名为 SalesRep 的表的连接,该表中包含这些用户名。

在 [映射] 选项卡中,为 Customer 表的 [下载类型] 列选择 [基于时间戳],为 [下载子集] 列选择 [自定义]。打开下部窗格中的 [下载子集] 选项卡。在第一个文本框([要添加到下载游标的 FROM 子句中的表])中,键入:

SalesRep

在第二个文本框([要在下载游标的 WHERE 子句中使用的 SQL 表达式])中,键入:

SalesRep.ml_username = {ml s.username} 
   AND Customer.active = 1
   AND Customer.cust_id = SalesRep.cust_id

在顶部窗格中右击该表并选择 [转到事件]。现在,该表的 download_cursor 脚本如下所示:

SELECT "DBA"."Customer"."cust_id",
 "DBA"."Customer"."cust_name"
FROM "DBA"."Customer", SalesRep
WHERE "DBA"."Customer"."last_modified" >= {ml s.last_table_download}
 AND SalesRep.ml_username = {ml s.username}
 AND Customer.active = 1
 AND Customer.cust_id = SalesRep.cust_id

WHERE 子句的最后一行创建了 Customer 与 SalesRep 的键连接。