2013-02-16 63 views
0

我有一个调用Web服务并以xml文档形式返回数据的SSIS项目。接下来,我需要解析数据流任务中的xml,并将其加载到sql server数据库中。没有数据通过SSIS通过内联模式从XML源读取

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

但是,当我执行包时,没有数据正在从xml源加载,也没有引发错误。输出消息显示“'OLE DB Destination写0行'”。我的数据视图不显示任何管道输出的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> 

回答

0

凯尔,你还在监测吗? 这篇文章可能会提供一些指导 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或decimal,但我不明白它的功能。

无论如何,如果我试图修改在XSD说,小数字段整数(或长)关键字段,我知道肯定是整数,然后XML源读取杂音。它不会产生任何错误,并像酸性的幼儿园老师一样提供绿色的蜱虫。另一方面,如果我让原始内联XSD具有它的方式,小数字段保持不变,它就可以工作。这是一个XML结构为200M的200M文件。约7秒钟导入。哦,是的,一个备忘录字段作为varchar(4000)

我发现我最快乐的路径是获取SQL目标来生成我的表,加载它,然后CONVERT属性到另一个更具有apt类型的表。

希望这有助于

附录 的数据转换处理XML源代码和SQL目的地之间很好地工作。因此,将XSD中的所有Int类型重写为decimal,在xml源码中重新载入XSD,然后在Data Conversion中将其转换回int。