J'utilise SSIS dans Visual Studio 2008. J'ai de nombreux fichiers XML que je dois traiter et placer dans une structure de base de données existante (SQL Server 2005). C'est ma première tentative d'utilisation de SSIS et je suis un peu coincé. J'ai trouvé la tâche de flux de données XML, lui ai attribué un fichier xml de test et son XSD associé, et mappé un nœud à une table de base de données. Ma question est, comment puis-je associer plusieurs nœuds xsd à plusieurs tables? Je n'ai sûrement pas à configurer une source XML pour chaque table?
Voici une option possible qui montre comment charger plusieurs fichiers XML ayant la même définition dans une table SQL Server. L'exemple utilise SQL Server 2008 R2
et SSIS 2008 R2
. L'exemple présenté ici charge trois fichiers XML dans une table SQL à l'aide de SSIS Data Flow Task
avec l'aide de XML Source
composant.
Processus étape par étape:
dbo.Items
en utilisant le script donné sous SQL Scripts section.Items.xsd
dans le chemin du dossier C:\temp\xsd en utilisant le contenu fourni dans la section Fichier XSD.Items_1.xml
, Items_2.xml
et Items_3.xml
dans le chemin du dossier C:\temp\xml en utilisant le contenu fourni dans la section Fichiers XML.FileExtension
, FilePath
et FolderPath
comme indiqué dans la capture d'écran # 1.SQLServer
pour vous connecter à l'instance SQL Server comme illustré dans la capture d'écran # 2.Control Flow
tab, placez un Foreach loop container
et un Data Flow Task
dans le conteneur de boucle Foreach, comme illustré dans la capture d'écran # .Foreach Loop container
comme illustré dans les captures d'écran # 4 et # 5.Data Flow Task
pour accéder au Data Flow
tab. Placez un XML Source
composant et un OLE DB Destination
comme illustré dans la capture d'écran # 6.XML Source
comme illustré dans la capture d'écran # 7 et # 8. Le chemin du fichier XML sera extrait de la variable FilePath. Cette variable sera remplie par le Foreach Loop container
.OLE DB Destination
comme illustré dans les captures d'écran # 9 et # 1.dbo.Items
contient désormais les données présentes dans trois fichiers XML.J'espère que cela pourra aider.
Scripts 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
fichier 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>
Fichiers 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>
Capture d'écran # 1:
Capture d'écran # 2:
Capture d'écran # 3:
Capture d'écran # 4:
Capture d'écran # 5:
Capture d'écran n ° 6:
Capture d'écran # 7:
Capture d'écran # 8:
Capture d'écran # 9:
Capture d'écran # 10:
Capture d'écran # 11:
Capture d'écran # 12:
Capture d'écran # 13:
Capture d'écran # 14:
Vous devez également ajouter @[user::FilePath]
à la [XML Source].[XMLData]
dans la tâche de flux de données ou le package indique aucun fichier source trouvé après l'exécution du package.