web-dev-qa-db-ja.com

SSISパッケージを使用してXMLファイルをデータベースにロードする方法

Visual Studio 2008でSSISを使用しています。処理して既存のDB構造(SQL Server 2005)に配置する必要のあるXMLファイルがたくさんあります。これはSSISを使用する最初の試みであり、少し行き詰まっています。 XMLデータフロータスクを見つけて、テストxmlファイルとそれに関連付けられたXSDを割り当て、1つのノードをデータベーステーブルにマップしました。私の質問は、多くのxsdノードを多くのテーブルに関連付けるにはどうすればよいですか?確かに、各テーブルにXMLソースを設定する必要はありませんか?

16
Ben

以下は、同じ定義を持つ複数のXMLファイルをSQL Serverテーブルにロードする方法を示す可能なオプションです。この例では、SQL Server 2008 R2およびSSIS 2008 R2を使用しています。ここに示す例では、Data Flow Taskコンポーネントを使用してSSIS XML Sourceを使用し、3つのXMLファイルをSQLテーブルにロードします。

段階的なプロセス:

  1. SQL Scriptsセクションにあるスクリプトを使用して、dbo.Itemsという名前のテーブルを作成します。
  2. Items.xsdという名前のXSDファイルをフォルダーパスに作成しますC:\ temp\xsdXSDファイルセクションで提供されるコンテンツを使用します。
  3. 3つのXMLファイル、つまりItems_1.xmlItems_2.xmlItems_3.xmlをフォルダーパスに作成C:\ temp\xmlXML Filesセクション。
  4. パッケージで、スクリーンショット#1に示すように、FileExtensionFilePathFolderPathの3つの変数を作成します。
  5. パッケージの接続マネージャーで、OLE SQLServerという名前のDB接続を作成して、スクリーンショット#2に示すようにSQL Serverインスタンスに接続します。
  6. スクリーンショット#に示すように、Control Flowタブで、Foreachループコンテナー内にForeach loop containerData Flow Taskを配置します。
  7. スクリーンショット#4および#5に示すように、Foreach Loop containerを構成します。
  8. Data Flow Taskをダブルクリックして、Data Flowタブに移動します。スクリーンショット#6に示すように、XML SourceコンポーネントとOLE DB Destinationを配置します。
  9. スクリーンショット#7および#8に示すようにXML Sourceを構成します。 XMLファイルのパスは、変数FilePathから取得されます。この変数は、Foreach Loop containerによって入力されます。
  10. スクリーンショット#9および#1に示すようにOLE DB Destinationを構成します。
  11. スクリーンショット#11および#12は、パッケージの実行を示しています。
  12. スクリーンショット#1テーブルデータを示しますbeforeパッケージの実行。スクリーンショット#14テーブルデータを示しますafterパッケージの実行。テーブルdbo.Itemsのデータには、3つのXMLファイルに存在するデータが含まれています。

お役に立てば幸いです。

SQLスクリプト:

CREATE TABLE [dbo].[Items](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ItemNumber] [nvarchar](50) NOT NULL,
    [ItemName] [nvarchar](60) NOT NULL,
    [Price] [numeric](18, 2) NOT NULL,
CONSTRAINT [PK_Items] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO

XSDファイル

<xsd:schema xmlns:schema="ItemsXSDSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.Microsoft.com/sqlserver/2004/sqltypes" targetNamespace="ItemsXSDSchema" elementFormDefault="qualified">
    <xsd:import namespace="http://schemas.Microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.Microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
    <xsd:element name="Items">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element minOccurs="0" maxOccurs="unbounded" name="Item">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="Id" type="sqltypes:int" />
                            <xsd:element name="ItemNumber">
                                <xsd:simpleType>
                                    <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
                                        <xsd:maxLength value="20" />
                                    </xsd:restriction>
                                </xsd:simpleType>
                            </xsd:element>
                            <xsd:element name="ItemName">
                                <xsd:simpleType>
                                    <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
                                        <xsd:maxLength value="60" />
                                    </xsd:restriction>
                                </xsd:simpleType>
                            </xsd:element>
                            <xsd:element name="Price">
                                <xsd:simpleType>
                                    <xsd:restriction base="sqltypes:numeric">
                                        <xsd:totalDigits value="18" />
                                        <xsd:fractionDigits value="2" />
                                    </xsd:restriction>
                                </xsd:simpleType>
                            </xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

XMLファイル

Items_1.xml

<?xml version="1.0"?>
<Items xmlns="ItemsXSDSchema">  
    <Item>
        <Id>1</Id>
        <ItemNumber>I2345343</ItemNumber>
        <ItemName>Monitor</ItemName>
        <Price>299.99</Price>
    </Item>
</Items>

Items_2.xml

<?xml version="1.0"?>
<Items xmlns="ItemsXSDSchema">  
    <Item>
        <Id>1</Id>
        <ItemNumber>J1231231</ItemNumber>
        <ItemName>Mouse</ItemName>
        <Price>29.99</Price>
    </Item>
</Items>

Items_3.xml

<?xml version="1.0"?>
<Items xmlns="ItemsXSDSchema">  
    <Item>
        <Id>1</Id>
        <ItemNumber>K0456212</ItemNumber>
        <ItemName>Keyboard</ItemName>
        <Price>49.99</Price>
    </Item>
</Items>

スクリーンショット#1:

1

スクリーンショット#2:

2

スクリーンショット#3:

3

スクリーンショット#4:

4

スクリーンショット#5:

5

スクリーンショット#6:

6

スクリーンショット#7:

7

スクリーンショット#8:

8

スクリーンショット#9:

9

スクリーンショット#10:

10

スクリーンショット#11:

11

スクリーンショット#12:

12

スクリーンショット#13:

13

スクリーンショット#14:

13

44
user756519

また、データフロータスクの@[user::FilePath][XML Source].[XMLData]を追加する必要があります。そうしないと、パッケージの実行後にパッケージにソースファイルが見つかりませんと表示されます。

1
SQLNoSQL