从 BizTalk 执行 SQL 个存储过程

Execute SQL stored procedure from BizTalk

我在 BizTalk 编排中有三个任务要做

  1. 执行带有动态参数的存储过程
  2. 插入数据库
  3. 在数据库中进行更新

示例数据

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

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

更新

换句话说:任务是

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

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

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

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

高级概述:

  1. 创建您的存储过程(例如 usp_Test)来执行您的 inserts/updates。包括将在您的 WHERE 子句中使用的参数。
  2. 使用添加->添加生成的项目->使用适配器服务为存储过程生成架构和绑定文件。
  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 服务器)。确保应该作为 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 服务器中。换句话说,不要让 SQL 服务器粉碎 XML 当你有 BizTalk 为你做那件事时 - BizTalk 几乎肯定会做得更好(性能和开发方面)。
  • 如果您 return 从 SQL 服务器获取数据,请考虑使用强类型(如果您的过程结果集 return 作为普通旧 SELECT或通过 OUTPUT 参数)或 XML 轮询(如果您的程序 return 是使用 FOR XML 的结果集)。避免普通过程调用,除非您不希望处理过程中的 return 数据。