在 SQL Server 中使用 SQL 适配器进行轮询

Microsoft BizTalk Adapter for SQL Server 使适配器客户端能够接收来自 SQL Server 数据库的数据更改消息。 SQL 适配器支持接收“基于轮询”的消息,其中适配器执行指定的 SQL 语句(SELECT 语句或存储过程),检索或更新数据,并定期向适配器客户端提供结果。

SQL 适配器公开以下轮询作业:

  • 轮询:使你能够定期接收关于 SQL Server 表或视图的数据变更通知。 消息不是强类型化。

  • TypedPolling:使您能够从 SQL Server 数据库接收强类型消息。 如果打算将轮询消息中的元素映射到任何其他架构,则必须使用此操作。

  • XmlPolling。 使你能够使用 SELECT 语句或存储过程,这些语句使用 FOR XML 子句并将数据作为 XML 消息返回。 此操作将轮询消息返回为 XML 消息。

    有关 FOR XML 子句的详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkId=131402

    有关在 SQL 适配器中轮询的详细信息,请参阅 使用 BizTalk Server 从 SQL Server 接收基于轮询的数据更改消息

民意调查

使用 SQL 适配器的典型轮询作涉及以下内容:

  1. 适配器客户端必须在 InboundOperationType 绑定属性中指定Polling为入站作。 此绑定属性的默认值为 Polling.

  2. 适配器客户端必须为 PolledDataAvailableStatement 绑定属性指定 SQL 语句,该属性确定是否有数据可用于轮询。 执行此语句时返回的第一个结果集的第一行的第一列包含一个整数值。 如果没有可用于轮询的数据,则返回值为 0(零)。 如果有数据可用,则返回值大于零。

  3. 适配器客户端必须为 PollingIntervalInSeconds 绑定属性指定轮询间隔,以定义 执行 PolledDataAvailableStatement 绑定属性中的语句的间隔。 在每个轮询间隔结束时,将执行轮询数据可用的声明,并返回结果集。

  4. 适配器客户端必须为 PollingStatement 绑定属性指定轮询 SQL 语句(SELECT 语句或存储过程)。 如果有数据可用于轮询(由 PolledDataAvailableStatement 绑定属性确定),适配器将执行轮询语句来获取和更新 SQL Server 数据库中的数据(如果适用)。 将 SQL 适配器与 BizTalk Server 一起使用时,也会使用同一事务将消息提交到 BizTalk Server。

  5. 适配器客户端可以使用 PollWhileDataFound 绑定属性忽略轮询间隔,并在可用时连续轮询数据。

  6. 作为执行轮询语句而返回的结果集作为入站消息发送到适配器客户端。

注释

UseAmbientTransaction 设置为 False 时,不会调用 PolledDataAvailableStatement 。 相反,适配器直接调用 PollingStatement

注释

XmlPolling操作涉及与轮询操作相同的步骤。

Strongly-Typed 轮询

使用 SQL 适配器的典型强类型化轮询操作通常包括以下步骤:

  1. 适配器客户端必须在 InboundOperationType 绑定属性中指定TypedPolling为入站作。 此绑定属性的默认值为 Polling.

  2. 适配器客户端必须将入站 ID 指定为连接 URI 的一部分。 入站 ID 可以是任何字符串,并被添加到 TypedPolling 操作的标准命名空间中,以防止命名空间冲突。

  3. 其余步骤与上一部分所述的轮询作中列出的步骤 2-6 相同。

    有关与轮询和强类型轮询相关的绑定属性的详细信息,请参阅 有关适用于 SQL Server 适配器绑定属性的 BizTalk 适配器的信息。

注释

执行轮询语句后,可以返回多个结果集。 如果结果集不包含任何行,则不会向适配器客户端发送任何消息。

下图提供有关 SQL 适配器中的轮询工作流的信息。 演示了轮询工作流的两种方案:

  1. 当 PollWhileDataFound 的值设置为“False”时(默认设置)。

  2. 当 PollWhileDataFound 的值设置为“True” 时。

    轮询工作流(PollWhileDataFound = False) 轮询工作流(PollWhileDataFound = True)

轮询和查询通知之间的差异

尽管轮询和查询通知都是入站操作,并且向适配器客户端通知 SQL Server 数据库数据更改的信息,但下表列出了两者之间的一些差异。 以下差异将帮助你根据你的要求决定某项操作:

民意调查 查询通知
轮询由适配器启动。 适配器执行一个语句来验证数据是否可用于轮询,如果某些数据可用于轮询,则通过执行轮询语句来启动轮询。 查询通知由 SQL Server 启动。 适配器颁发的通知语句只是指示数据库启动通知,以防语句的结果集发生更改。
可以使用轮询语句读取或更新 SQL Server 数据库表中的数据。 可以使用查询通知语句仅读取 SQL Server 数据库表中的数据。
轮询会告知你已更改的实际数据。 查询通知仅通知插入、更新和删除等数据中的更改类型。
数据更改通知取决于轮询间隔,适配器客户端会在每个轮询间隔结束时告知数据更改。 提示: 在数据更改持续发生的情况下,使用轮询可以提供更高的吞吐量,而无需在每次更改发生时收到通知。 相反,您需要指定一个轮询时间间隔,在此之后,您希望接收到关于自上次数据更改通知以来发生的所有更改的通知。 数据更改通知是即时的。

有关 Microsoft BizTalk Adapter for SQL Server 中的查询通知的详细信息,请参阅 使用 BizTalk Server 接收 SQL 查询通知

另请参阅

可以使用适配器执行哪些作?