【问题标题】:Execute SQL stored procedure from BizTalk从 BizTalk 执行 SQL 存储过程
【发布时间】:2015-10-06 12:43:30
【问题描述】:

我在 BizTalk 业务流程中要完成三项任务

  1. 使用动态参数执行存储过程
  2. 插入数据库
  3. 在 DB 中进行更新

示例数据

存储过程[databasename].[storedprocedurename] 'param1Value', 'param2Value'

[databasename].[tablename] (id integer,desc nvarchar(50))

更新

改写:任务是

  1. 如何使用来自传入 XML 消息的参数从 BizTalk 业务流程调用存储过程

  2. 如何从编排中插入数据库表(并取回操作结果)

  3. 如何使用来自传入 xml 的动态“where”值条件进行更新

【问题讨论】:

  • 还有,你的问题是什么?
  • 请您认识的人来帮助您。 (或者告诉你的老板你需要帮助。)
  • 1.如何使用来自 xml 消息的参数从 BT 编排调用存储过程。 2 如何从编排中插入数据库表。 3. 如何使用动态“where”条件进行更新

标签: sql biztalk


【解决方案1】:

这里有完整的文档:Executing Stored Procedures in SQL Server by Using BizTalk Server

高级概述:

  1. 创建存储过程(例如 usp_Test)来执行插入/更新。包括将在WHERE 子句中使用的参数。
  2. 使用 Add->Add Generated Items->Consume Adapter Service 为存储过程生成架构和绑定文件。
  3. 创建从消息到存储过程架构的映射
  4. 更新逻辑发送端口上的操作以匹配 SP 名称 (usp_Test)
  5. 部署您的应用程序。
  6. 将第 2 步中物理发送端口的绑定导入您的应用程序
  7. 将编排绑定到此发送端口(或在发送端口上创建过滤器,可能基于BTS.Operation)。
  8. 使用在您导入的发送端口上设置的映射和一个过滤器创建端口(编排)。

奖金:

  1. Use table types to pass multiple inserts in a single call
  2. Use CompositeOperations to call multiple procedures/tableops

注意事项:

  • SQL 适配器不喜欢空节点(假设您使用的是 SQL Server)。确保应该作为NULL 进入的节点设置为xsi:nil=true(使用Nil functoid),或者它不存在于目标中(使用Value Mapping functoid,或方法到remove empty nodes in a pipeline or helper class)。
  • 其他适配器(例如 Oracle 或 Db2)将有自己的特殊挑战。 IMO,就可用功能和文档而言,sqlBinding 是最好的。如果您了解其他平台,您应该能够找出问题所在。
  • 避免发送 XML 参数,除非您打算将 XML 存储在 SQL Server 中。换句话说,当您让 BizTalk 为您做这些时,不要让 SQL Server 粉碎 XML - BizTalk 几乎肯定会做得更好(性能和开发方面)。
  • 如果您从 SQL Server 返回数据,请考虑使用强类型(如果您的过程结果集作为普通的旧 SELECT 或通过 OUTPUT 参数返回)或 XML 轮询(如果您的过程使用FOR XML)。避免普通的过程调用,除非您不希望处理来自过程的返回数据。

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 2015-10-25
    • 2011-11-07
    • 2010-09-25
    • 2019-02-05
    • 1970-01-01
    • 2015-08-28
    • 2011-01-08
    • 2019-04-03
    相关资源
    最近更新 更多