簡體   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