繁体   English   中英

SSIS不能从具有内联模式的XML源中读取数据

[英]No data read from XML source with inline schema by SSIS

我有一个SSIS项目,该项目调用Web服务并以xml文档的形式返回数据。 接下来,我需要在数据流任务中解析该xml并将其加载到sql服务器数据库中。

xml文件具有内联架构,并且包含大量数据。 在数据流的XML Source中,选择“内联架构”,所有列均正确列出。 到目前为止,一切似乎都很好。

但是,当我执行该程序包时,没有从xml源加载任何数据,并且不会引发任何错误。 输出消息显示“'OLE DB目标写入了0行'”。 我的dataview没有显示任何从xml源中传出的数据,并且我已经通过将一个简单的平面文件作为目标进行测试来消除了我的OLE DB目标作为麻烦的源(相同的问题,没有写入数据,也没有错误被抛出)。

下面是我的xml源代码的摘录,其中包含一个由我的Web服务任务创建的内联架构。 我将不胜感激,对此有任何帮助。

<?xml version="1.0" encoding="utf-16"?>
<DataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
  <xs:complexType>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="UPDATEDDEPT">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="DEPT_ID" type="xs:long" />
            <xs:element name="PARENT_ID" type="xs:long" />
            <xs:element name="DEPT_NAME">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:maxLength value="30" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="DEPTH" type="xs:int" />
            <xs:element name="LINEAGE">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:maxLength value="150" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="PRODUCTCOUNT" type="xs:int" />
            <xs:element name="MARKETLEADER" type="xs:int" />
            <xs:element name="PROFITBUILDER" type="xs:int" />
            <xs:element name="NEWITEM" type="xs:int" />
            <xs:element name="PALLET" type="xs:int" />
            <xs:element name="LASTUPDATED" type="xs:dateTime" />
            <xs:element name="STATUS" type="xs:int" minOccurs="0" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:complexType>
 </xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet>
  <UPDATEDDEPT diffgr:id="UPDATEDDEPT1" msdata:rowOrder="0">
    <DEPT_ID>1010100000000000000</DEPT_ID>
    <PARENT_ID>1000000000000000000</PARENT_ID>
    <DEPT_NAME>STRIKING AND CUTTING TOOLS    </DEPT_NAME>
    <DEPTH>1</DEPTH>
    <LINEAGE>/1000000000000000000/1010100000000000000/</LINEAGE>
    <PRODUCTCOUNT>1054</PRODUCTCOUNT>
    <MARKETLEADER>1</MARKETLEADER>
    <PROFITBUILDER>2</PROFITBUILDER>
    <NEWITEM>8</NEWITEM>
    <PALLET>0</PALLET>
    <LASTUPDATED>2013-02-04T05:38:57.437-05:00</LASTUPDATED>
    <STATUS>1</STATUS>
  </UPDATEDDEPT>
  <UPDATEDDEPT diffgr:id="UPDATEDDEPT2" msdata:rowOrder="1">
    <DEPT_ID>7070570565000000000</DEPT_ID>
    <PARENT_ID>7070500000000000000</PARENT_ID>
    <DEPT_NAME>KNIVES &amp; ACCESS               </DEPT_NAME>
    <DEPTH>2</DEPTH>
    <LINEAGE>/7000000000000000000/7070500000000000000/7070570565000000000/</LINEAGE>
    <PRODUCTCOUNT>176</PRODUCTCOUNT>
    <MARKETLEADER>0</MARKETLEADER>
    <PROFITBUILDER>0</PROFITBUILDER>
    <NEWITEM>2</NEWITEM>
    <PALLET>0</PALLET>
    <LASTUPDATED>2013-02-04T05:38:59.823-05:00</LASTUPDATED>
    <STATUS>1</STATUS>
  </UPDATEDDEPT>
 </NewDataSet>
 </diffgr:diffgram>
</DataSet>

凯尔,您还在监视吗? 本文可能揭示了一些启示http://connect.microsoft.com/SQLServer/feedback/details/579439/ssis-xmlsource-xsd-integer-converts-incorrectly-in-xml-source

我尝试读取的XML源来自VFP 9表,并且具有内联XSD。 在XSD中,任何明显的整数属性(如键)都被指定为type =“ decimal”。 VFP没有整数类型。 它的毯子类型是数字。 我已经尝试了外部,内联和生成的XSD版本。 XML源中有选项xml整数映射,可以将其设置为int32或小数,但我不了解其功能。

无论如何,如果我尝试在XSD中进行修改,则我知道的整数(或长整数)键字段的十进制字段肯定是整数,那么XML源代码就会出现错误。 它不会产生错误,并且像幼儿园的老师一样给绿色刻度线。 另一方面,如果我让原始的内联XSD保持原样,则保留十进制字段不变,它会起作用。 多数民众赞成在200M文件与XML结构为表。 大约需要7秒才能导入。 哦,是的,备注字段最后加上varchar(4000)

我发现最幸福的路径是获取SQL目标以生成我的表,将其加载,然后将属性转换为具有更多apt类型的另一个表。

希望这可以帮助

附录数据转换过程在xml源和sql目标之间可以很好地工作。 因此,将XSD中的所有Int类型重写为十进制,在xml源中重新加载XSD,然后在数据转换中转换回int。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM