使用 SQL 适配器在 SQL Server 中执行存储过程
SQL Server 中的 Transact-SQL 和 CLR 存储过程在使用“使用适配器服务加载项”或“添加适配器服务参考引用插件”时,在“过程”节点下显示为 Microsoft BizTalk 适配器中的操作SQL Server。 SQL 适配器公开的操作名称与 SQL Server 中存储过程的名称相同。 存储过程中的所有参数都在相应的操作中公开。 OUT 参数包含存储过程的返回值。 存储过程的结果集是 DataSet 数组。 有关数据集的详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkId=196853。 目标对象的架构信息在运行时作为响应消息的一部分获取。
但是,如果要在设计时获取目标对象的架构信息,则必须在“使用适配器服务加载项”或“添加适配器服务引用插件”中的 “强类型过程” 节点下为过程生成架构。 请注意,相同的存储过程显示在“ 过程 ”和“ 强类型过程” 节点下。 存储过程的返回值是强类型,而不仅仅是 DataSet 的数组。 由于架构信息在设计时可用,因此可以使用它将存储过程的架构映射到其他操作的另一个架构。 例如,可以将为强类型过程生成的架构映射到为数据库表上的 Insert 操作生成的架构。
注意
如果出现以下情况,则无法在设计时查看强类型存储过程的架构信息:
- 使用游标(另一个存储过程的返回值)作为强类型存储过程的输入参数。
- 它是一个 CLR 存储过程,用于对表执行一些操作。
支持使用 FOR XML 子句的存储过程
使用 SQL 适配器还可以执行具有具有 FOR XML 子句的 SELECT 语句的存储过程。 在 SELECT 语句中使用 FOR XML 子句,以 XML 而不是行集的形式返回结果。 有关 FOR XML 子句的详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkId=131402。
注意
BizTalk Server 提供的“本机”SQL 适配器仅支持那些返回 XML 的存储过程,即在 SELECT 语句中具有 FOR XML 子句。 使用 FOR XML 子句支持存储过程,可以使用基于 WCF 的 SQL 适配器执行这些存储过程,而无需对存储过程定义进行任何更改。
支持具有临时表的存储过程
使用 SQL 适配器,可以为在其定义中包含临时表的存储过程生成元数据。 但是,对于此类存储过程,必须使用“添加适配器服务引用”插件或使用适配器服务加载项时,仅从“ 过程 ”节点选择存储过程来生成元数据。 适配器不支持从 “强类型 过程”节点下为此类存储过程生成元数据。
支持包含不带名称或相同名称的列的结果集
下表列出了 SQL 适配器如何处理存储过程和强类型存储过程的结果集中没有名称和相同名称的列。
结果集包含... | 存储过程 | Strongly-Typed 存储过程 |
---|---|---|
不带名称的列 | SQL 适配器按以下方式为列生成名称:为列生成唯一 ID (GUID) 不带“-” (连字符) ,然后 GUID 字符串以“C”为前缀,因为生成的 GUID 可能以数字开头,但 XML 标记名称不能。 | SQL 适配器为列生成以下名称:“UnNamedColumn[column_index]”,其中column_index从“0”开始。 |
具有相同名称的列 | 除第一个名称外,其他列的名称追加了“” (下划线) 后跟不带“-” (连字符) 的随机 GUID。例如:“\[GUID]”。 | SQL 适配器不支持结果集中具有相同名称的列,并引发异常。 重要: 必须确保结果集中的列名具有唯一的名称。 |
注意
一般情况下,建议对存储过程和强类型存储过程的结果集中的所有列进行命名,并且必须具有唯一的名称。
详细信息:
如何执行存储过程,请参阅使用 BizTalk Server 在 SQL Server 中执行存储过程。
如何执行具有 FOR XML 子句的存储过程,请参阅使用 BizTalk Server 在 SQL Server 中执行具有 FOR XML 子句的存储过程。
存储过程的消息架构,请参阅 过程和函数的消息架构。