要使用 upload_update 脚本检测冲突,请在 WHERE 子句中包括所有列:
UPDATE table-name SET col1 = {ml r.col1}, col2 = {ml r. col2 } ... WHERE pk1 = {ml o.pk1} AND pk2 = {ml o.pk2} ... AND col1 = {ml o.col1} AND col2 = {ml o.col2} ...
在此语句中,col1、col2 等是非主键列,而 pk1、pk2 等是主键列。传递到第二组非主键列 (o.) 的值是更新行的前映像(或旧值)。WHERE 子句将比较从远程数据库上载的旧值与统一数据库中的当前值。如果两个值不匹配,将忽略更新,保留统一数据库中已有的值。
仅当使用 upload_fetch 或 upload_fetch_column_conflict 没有检测到冲突时才使用 upload_update 脚本检测冲突。
为以下事件定义脚本:upload_update、upload_old_row_insert、upload_new_row_insert 和 resolve_conflict。
定义以下 upload_update 脚本:
UPDATE product SET name={ml r.name}, description={ml r.description} WHERE id={ml r.id} AND name={ml o.name} AND description={ml o.description} |
MobiLink 执行更新,然后查看修改了多少行。如果没有行被修改,则 MobiLink 检测到冲突:统一数据库中没有行与前映像行匹配。MobiLink 将调用 upload_old_row_insert 和 upload_new_row_insert 脚本,然后调用 resolve_conflict。
请参见使用 resolve_conflict 脚本解决冲突。
不为 upload_old_row_insert、upload_new_row_insert 和 resolve_conflict 定义脚本。而是创建一个存储过程来处理冲突检测和冲突解决,并在 upload_update 脚本中调用它。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |