0

我必须用 XML 请求调用 SP。这是由向导自动生成的一个 XML 文档,其中包含如下元素:

<xs:element name="sp_storedProcedureName">
  <xs:complexType>
        <xs:attribute name="Field1" type="xs:string"/>
        <xs:attribute name="Field2" type="xs:string"/>
         . . .  

某些 SP 参数可能为空。属性不适合这种情况,因为 null 属性意味着“无属性”,因此模式验证失败。

我以这种方式手动重新创建了请求模式:

<xs:element name="sp_storedProcedureName">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Field1" type="xs:string"/>
      <xs:element name="Field2" type="xs:string"/>
      <xs:element name="FieldN" type="xs:string" nillable="true"/>
       . . .

并且创建的消息似乎是有效的(LINT 这么说,地图测试失败),这意味着这些值是:

<ns0:sp_storedProcedureName>
  <ns0:Field1>AB012345</ns0:Field1>
  <ns0:Field2>ZZ</ns0:Field2>
  <ns0:FieldN xsi:nil="true" />
   . . .

这正是我所需要的。当消息到达发送端口管道时,传输失败并出现错误:

HRESULT="0x80040e10"
Description="Procedure or function 'sp_storedProcedureName' expects parameter '@Field1', which was not supplied."

但很明显,该值是由 xml 提供的,但我猜 SQL 适配器无法从元素中读取,而能够从主元素的属性中读取。

是这样吗?

我的主要问题是:如何使用 xml 将 null 值传递给存储过程

4

1 回答 1

0

更改存储过程,以便如果该字段不是从 BizTalk 传递的,则它默认为 NULL,这往往是 BizTalk 的行为,如果您正在映射的内容不存在于您正在映射的有效负载中。

于 2017-06-27T23:26:37.420 回答