从 BizTalk 执行 SQL 个存储过程
Execute SQL stored procedure from BizTalk
我在 BizTalk 编排中有三个任务要做
- 执行带有动态参数的存储过程
- 插入数据库
- 在数据库中进行更新
示例数据
存储过程[databasename].[storedprocedurename] 'param1Value', 'param2Value'
table [databasename].[tablename] (id integer,desc nvarchar(50))
更新
换句话说:任务是
如何使用来自传入 XML 消息的参数从 BizTalk 业务流程调用存储过程
如何从编排插入数据库 table(并取回操作结果)
如何使用传入的动态“where”值条件进行更新xml
这里有完整的文档:Executing Stored Procedures in SQL Server by Using BizTalk Server
高级概述:
- 创建您的存储过程(例如 usp_Test)来执行您的 inserts/updates。包括将在您的
WHERE
子句中使用的参数。
- 使用添加->添加生成的项目->使用适配器服务为存储过程生成架构和绑定文件。
- 创建从您的消息到存储过程模式的映射
- 更新逻辑发送端口上的操作以匹配 SP 名称 (usp_Test)
- 部署您的应用程序。
- 将第 2 步中的物理发送端口绑定导入您的应用程序
- 将编排绑定到这个发送端口(或者在发送端口上创建一个过滤器,可能基于
BTS.Operation
)。
- 使用在您导入的发送端口上设置的映射和编排中的过滤器创建端口。
奖金:
- Use table types to pass multiple inserts in a single call
- 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 数据。
我在 BizTalk 编排中有三个任务要做
- 执行带有动态参数的存储过程
- 插入数据库
- 在数据库中进行更新
示例数据
存储过程[databasename].[storedprocedurename] 'param1Value', 'param2Value'
table [databasename].[tablename] (id integer,desc nvarchar(50))
更新
换句话说:任务是
如何使用来自传入 XML 消息的参数从 BizTalk 业务流程调用存储过程
如何从编排插入数据库 table(并取回操作结果)
如何使用传入的动态“where”值条件进行更新xml
这里有完整的文档:Executing Stored Procedures in SQL Server by Using BizTalk Server
高级概述:
- 创建您的存储过程(例如 usp_Test)来执行您的 inserts/updates。包括将在您的
WHERE
子句中使用的参数。 - 使用添加->添加生成的项目->使用适配器服务为存储过程生成架构和绑定文件。
- 创建从您的消息到存储过程模式的映射
- 更新逻辑发送端口上的操作以匹配 SP 名称 (usp_Test)
- 部署您的应用程序。
- 将第 2 步中的物理发送端口绑定导入您的应用程序
- 将编排绑定到这个发送端口(或者在发送端口上创建一个过滤器,可能基于
BTS.Operation
)。 - 使用在您导入的发送端口上设置的映射和编排中的过滤器创建端口。
奖金:
- Use table types to pass multiple inserts in a single call
- 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 数据。