从BizTalk执行SQL存储过程

时间:2015-10-06 12:43:30

标签: sql biztalk

我在BizTalk业务流程中有三个任务要做

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

    示例数据

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

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

    更新

    改述:任务

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

    2. 如何从业务流程插入到DB表中(并获取操作结果)

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

1 个答案:

答案 0 :(得分:4)

此处有完整的文档: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. 使用您导入的发送端口上设置的地图创建端口,并在Orchestration上创建过滤器。
  9. 奖金:

    1. Use table types to pass multiple inserts in a single call
    2. Use CompositeOperations to call multiple procedures/tableops
    3. 注意事项:

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