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

SQL Anywhere 11.0.1 (中文) » SQL Remote » SQL Remote 复制设计 » SQL Remote 复制设计和设置 » 发布和项目

 

只发布表中的某些行

要创建一个只包含表中某些行的发布,必须编写一个仅与要发布的行匹配的搜索条件。请在搜索条件中使用以下子句之一:

  • SUBSCRIBE BY 子句   当发布的多个预订者接收表中的不同行时,则使用 SUBSCRIBE BY 子句。

    建议在 SQL Remote 系统需要大量预订时使用 SUBSCRIBE BY 子句。SUBSCRIBE BY 子句允许将多个预订与单个发布关联,而 WHERE 子句则不能。预订者将根据所提供表达式的值来接收行。

    使用 SUBSCRIBE BY 子句的发布更加紧凑,更易于理解,并且与维护若干个 WHERE 子句发布相比,具有更优越的性能。

    请参见使用 SUBSCRIBE BY 子句只发布某些行

  • WHERE 子句   使用 WHERE 子句在某个项目中加入行子集。包含此项目的发布的所有预订者都将收到满足 WHERE 子句的行。

    所有未发布的行都必须具有缺省值。否则,当远程数据库尝试从统一数据库中插入新行时,将发生错误。

    可将 WHERE 子句合并到项目中。

    数据库服务器必须将信息添加到事务日志,然后扫描事务日志以便发送消息,发送的消息数与发布的数目成正比。WHERE 子句不允许将多个预订与单个发布关联,而 SUBSCRIBE BY 子句则可以。

    请参见使用 WHERE 子句只发布某些行

示例

您需要一个使每个销售代表执行以下任务的发布:

  • 预订他们的销售订单。

  • 在本地更新他们的销售订单。

  • 将他们的销售数据复制到统一数据库。

如果使用 WHERE 子句,则需要为每个销售代表创建单独的发布。下面的发布是为名为 Sam Singer 的销售代表创建的;其他每个销售代表需要的发布与之类似。

CREATE PUBLICATION PubOrdersSamSinger (
   TABLE SalesOrders
      WHERE Active = 1
);

以下语句将使 Sam Singer 预订 PubsOrdersSamSinger 发布。

CREATE SUBSCRIPTION
TO PubOrdersSamSinger
FOR Sam_Singer;

如果使用 SUBSCRIBE BY 子句,则只需要创建一个发布。所有销售代表都可以使用下面的发布:

CREATE PUBLICATION PubOrders (
   TABLE SalesOrders 
   SUBSCRIBE BY SalesRepresentativeID
);

以下语句将使 Sam Singer 以其 ID 号 8887 预订 PubsOrders 发布。

CREATE SUBSCRIPTION
TO PubOrders ('8887')
FOR Sam_Singer;

使用 SUBSCRIBE BY 子句只发布某些行
使用 WHERE 子句只发布某些行