数据脚本,用于为检测行级冲突而从统一数据库的已同步表中读取行。
在 SQL 脚本中,可以按名称或使用问号指定事件参数。不建议使用问号,建议您使用命名参数。不能在一个脚本中混合使用名称和问号。如果使用问号,则参数必须按照如下所示的顺序并且仅当没有指定任何后继参数时才是可选的(例如,如果您想使用参数 2,则必须使用参数 1)。如果使用命名参数,则可以按照任何顺序指定任意参数子集。
SQL 脚本的参数名称 | 说明 | 顺序(不建议用于 SQL) |
---|---|---|
s.remote_id |
VARCHAR(128)。MobiLink 远程 ID。只有在使用命名参数时才能引用远程 ID。 |
不适用 |
s.username |
VARCHAR(128)。MobiLink 用户名。此参数为可选参数。 |
可选 |
s.script_version | VARCHAR(128)。可选的 IN 参数,可指定 MobiLink 服务器将用于当前同步的脚本版本字符串传递到此参数。不能使用问号指定此参数。 |
不适用 |
r. primary-key-1 |
必需。第一个主键列值,由列名或列编号引用。 |
1(如果引用用户名则为 2) |
r. primary-key-2 |
必需。第二个主键列值,由列名或列编号引用。 |
2 |
... |
... |
... |
r. primary-key-N |
必需。最后一个主键列值,由列名或列编号引用。 |
N(如果引用用户名则为 N+1) |
无。
upload_fetch 脚本随 upload_update 事件使用。
结果集的列数和顺序必须与从远程数据库为此表上载的列数和顺序相匹配。如果返回值与上载的行中的前映像不匹配,则发生冲突。
不要在 upload_fetch 脚本中使用 READPAST 表提示。如果该脚本使用 READPAST 跳过锁定行,则同步逻辑会认为该行已被删除。根据您所定义的脚本,这会造成忽略上载的更新或触发冲突解决。忽略更新可能是不可接受的行为并可能是有害的。触发冲突解决可能不是一个问题,它取决于您已实现的解决逻辑。
您只能为远程数据库中的每个表编写一个 upload_fetch 脚本或一个 upload_fetch_column_conflict 脚本。
该脚本必须以 SQL 实现。 对于行的 Java 或 .NET 处理,请参见直接行处理。
此脚本在未定义以下脚本时可以被忽略:upload_new_row_insert、upload_old_row_insert 和 resolve_conflict。
以下 SQL 脚本来自 Contact 示例,并可在 %SQLANYSAMP16%\MobiLink\Contact\build_consol.sql 中找到。它用于识别在上载远程数据库中 Product 表的更新行时发生的冲突。此脚本从名称也为 Product 的表中选择行,这两个表的名称也可以不匹配,匹配与否取决于统一数据库与远程数据库的模式。
CALL ml_add_table_script( 'ver1', 'Product', 'upload_fetch', 'SELECT id, name, size, quantity, unit_price FROM Product WHERE id={ml r.id}' ) |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |