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

SAP Sybase SQL Anywhere 16.0 (中文) » MobiLink - 入门 » MobiLink 技术 » 用于 Sybase Central 的 MobiLink 插件 » 同步模型 » 同步模型任务

 

修改下载子集

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

前提条件

必须具有同步模型,且表映射的下载类型不得设置为 [自定义]。

 任务
  1. 双击 MobiLink 项目名称。

  2. 双击 [同步模型],然后选择同步模型名称。

  3. 单击 [映射] 选项卡。

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

  5. 在 [详细信息] 窗格中,打开 [下载子集] 选项卡。

  6. 从 [下载子集] 下拉列表中选择以下其中一个下载子集:[]、[用户]、[远程] 或 [自定义]。

  7. 如果选择 [用户] 或 [远程],将标识包含用户名和远程 ID 的列所在的位置。

    如果该列位于正在同步的统一表中,则选择 [在统一表中使用列],然后从 [列名称] 下拉列表中选择包含用户名或远程 ID 的列。

    如果该列位于其它表中,则选择 [在已共享关系表中使用列]。从 [要连接的表] 下拉列表中选择包含该列的表。从 [要匹配的列] 下拉列表中选择包含用户名或远程 ID 的列。使用连接条件来定义用于将同步表连接到影子表的连接条件。

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

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

    • 在第二个文本框(要在下载游标的 WHERE 子句中使用的 SQL 表达式)中,输入指定下载子集条件和连接条件、并且将添加到生成的 WHERE 子句的 SQL 表达式。可以在此表达式中使用 MobiLink 命名参数,包括验证参数。缺省情况下,下载删除子集使用相同的表达式和连接的表。如果将影子表用于跟踪删除操作并要使用相同的表达式,应避免在表达式中使用基表名。如果不可避免这种情况,请使用自定义下载删除子集。

结果

下载子集已修改。

用户示例

例如,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。对于连接条件,选择 DBA.ULOrder.cust_id=DBA.ULEmpCust.cust_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"."cust_id" = "DBA"."ULEmpCust"."cust_id" 
AND "DBA"."ULEmpCust"."cust_id" = {ml s.username}

自定义示例

假设您想按照 MobiLink 用户对 Customer 表的下载进行子集划分,并且只想下载 active=1 的行。由于您正在进行子集划分的表中不存在 MobiLink 用户名,所以需要创建一个连接,连接到包含 MobiLink 用户名的 SalesRep 表。

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

SalesRep

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

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

这两个表都包含 cust_id 列,所以引用这些列时必须在表达式中添加表名作为前缀。如果使用影子表跟踪要下载的删除操作,需要使用 Customer 表映射 [下载删除子集] 列中的 [] 或 [自定义],因为影子表名为 Customer_del 而不是 Customer。

在顶部窗格中右击该表并单击 [转到事件]。现在,该表的 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 的键连接。