0

Webサービスを呼び出してデータをxmlドキュメントの形式で返すSSISプロジェクトがあります。次に、データフロータスクでそのxmlを解析し、S​​QLサーバーデータベースにロードする必要があります。

xmlファイルにはインラインスキーマがあり、大量のデータが含まれています。データフローのXMLソースで、「インラインスキーマ」を選択すると、すべての列が正しくリストされます。この時点まではすべて問題ないようです。

ただし、パッケージを実行すると、xmlソースからデータが読み込まれず、エラーもスローされません。出力メッセージには、「'OLEDB変換先が0行を書き込みました'」と表示されます。私のデータビューには、xmlソースからパイプされているデータが表示されません。また、宛先として単純なフラットファイルを使用してテストすることにより、問題のソースとしてOLE DB宛先を排除しました(同じ問題、データが書き込まれず、エラーもありません)。スローされます)。

以下は、私のWebサービスタスクによって作成されたインラインスキーマを使用したxmlソースからの抜粋です。これのトラブルシューティングにご協力いただければ幸いです。

<?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>
4

1 に答える 1

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 には整数型がありません。ブランケット タイプは Numeric です。XSDの外部、インライン、および生成されたバージョンの両方を試しました。XMLソースにはオプションxml整数マッピングがあり、int32または10進数を設定できますが、その機能がわかりません。

とにかく、XSD で変更しようとすると、10 進数フィールドを整数 (または長い) キー フィールドに変換しようとすると、間違いなく整数であることがわかっているため、XML ソースがバグを読み取ります。これはエラーを生成せず、acid の幼稚園の先生のように緑色のチェックマークを付けます。一方、元のインライン XSD をそのままにしておけば、10 進数フィールドはそのままで、機能します。これは、テーブルとして構造化された XML を含む 200M ファイルです。取り込みに約7秒。そうそう、最後にメモ欄を varchar(4000) としてつけています

最も幸せな方法は、SQL 宛先を取得してテーブルを生成し、それをロードしてから、属性をより適切なタイプの別のテーブルに変換することです。

お役に立てれば

補遺 データ変換プロセスは、xml ソースと sql 宛先の間で適切に機能します。そのため、XSD のすべての Int 型を 10 進数に書き換え、xml ソースで XSD をリロードしてから、データ変換で int に戻します。

于 2013-04-26T16:13:25.920 に答える