我有一个SSIS项目,它调用Web服务并以xml文档的形式返回数据。接下来,我需要在数据流任务中解析该xml并将其加载到sql server数据库中。
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 & 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 :(得分:0)
我试图读取的XML源来自VFP 9表并具有XSD内联。任何明显的整数属性(如键)都在XSD中指定为type =“decimal”。 VFP没有整数类型。它的毯子类型是数字。我已经尝试过外部,内联和生成的XSD版本。在XML源代码中有选项xml整数映射,可以设置int32或decimal,但我不理解它的功能。
无论如何,如果我试图在XSD中修改说,十进制字段到整数(或长)键字段,我知道肯定是整数,那么XML源读取buggers了。它不会产生任何错误,并且像幼儿园老师那样给出绿色的蜱虫。另一方面,如果我让原始内联XSD有它的方式,小数字段完整,它的工作原理。这是一个200M的文件,XML结构为表格。导入约7秒。哦,是的,备注字段最后被添加为varchar(4000)
我发现我最开心的方法是让SQL目标生成我的表,加载它然后将属性CONVERT转换到另一个具有更多apt类型的表。
希望这有帮助
附录 数据转换过程在xml源和sql目标之间很好地工作。因此,将XSD中的所有Int类型重写为十进制,在xml源中重新加载XSD,然后在数据转换中转换回int。