Visual Studio 2008でSSISを使用しています。処理して既存のDB構造(SQL Server 2005)に配置する必要のあるXMLファイルがたくさんあります。これはSSISを使用する最初の試みであり、少し行き詰まっています。 XMLデータフロータスクを見つけて、テストxmlファイルとそれに関連付けられたXSDを割り当て、1つのノードをデータベーステーブルにマップしました。私の質問は、多くのxsdノードを多くのテーブルに関連付けるにはどうすればよいですか?確かに、各テーブルにXMLソースを設定する必要はありませんか?
以下は、同じ定義を持つ複数のXMLファイルをSQL Serverテーブルにロードする方法を示す可能なオプションです。この例では、SQL Server 2008 R2
およびSSIS 2008 R2
を使用しています。ここに示す例では、Data Flow Task
コンポーネントを使用してSSIS XML Source
を使用し、3つのXMLファイルをSQLテーブルにロードします。
段階的なプロセス:
dbo.Items
という名前のテーブルを作成します。Items.xsd
という名前のXSDファイルをフォルダーパスに作成しますC:\ temp\xsdXSDファイルセクションで提供されるコンテンツを使用します。Items_1.xml
、Items_2.xml
、Items_3.xml
をフォルダーパスに作成C:\ temp\xmlXML Filesセクション。FileExtension
、FilePath
、FolderPath
の3つの変数を作成します。SQLServer
という名前のDB接続を作成して、スクリーンショット#2に示すようにSQL Serverインスタンスに接続します。Control Flow
タブで、Foreachループコンテナー内にForeach loop container
とData Flow Task
を配置します。Foreach Loop container
を構成します。Data Flow Task
をダブルクリックして、Data Flow
タブに移動します。スクリーンショット#6に示すように、XML Source
コンポーネントとOLE DB Destination
を配置します。XML Source
を構成します。 XMLファイルのパスは、変数FilePathから取得されます。この変数は、Foreach Loop container
によって入力されます。OLE DB Destination
を構成します。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:
スクリーンショット#2:
スクリーンショット#3:
スクリーンショット#4:
スクリーンショット#5:
スクリーンショット#6:
スクリーンショット#7:
スクリーンショット#8:
スクリーンショット#9:
スクリーンショット#10:
スクリーンショット#11:
スクリーンショット#12:
スクリーンショット#13:
スクリーンショット#14:
また、データフロータスクの@[user::FilePath]
に[XML Source].[XMLData]
を追加する必要があります。そうしないと、パッケージの実行後にパッケージにソースファイルが見つかりませんと表示されます。