Comment charger un fichier XML dans une base de données en utilisant un paquet SSIS?
j'utilise SSIS dans Visual Studio 2008. J'ai de nombreux fichiers XML que je dois traiter et placer dans une structure DB existante (SQL Server 2005). C'est ma première tentative d'utiliser SSIS et je suis un peu coincé. J'ai trouvé la tâche de flux de données XML, lui ai assigné un fichier xml de test et il est associé à XSD, et mappé un noeud à une Table de base de données. Ma question Est, Comment puis-je associer de nombreux noeuds xsd avec de nombreuses tables? Je n'ai pas besoin de configurer une source XML pour chaque table.
2 réponses
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 ci-dessous charge trois fichiers XML dans une table SQL en utilisant SSIS Data Flow Task avec l'aide de XML Source composant.
Étape-par-étape du processus:
- Créer une table nommée
dbo.Itemsen utilisant le script donné sous SQL Scripts section. - créer un fichier XSD nommé
Items.xsddans le dossier C:\temp\xsd en utilisant le contenu fourni sous fichier XSD section. - créer trois fichiers XML à savoir
Items_1.xml,Items_2.xmletItems_3.xmldans le dossier C:\temp\xml en utilisant le contenu fourni sous XML Files section. - sur le paquet, créez 3 variables à savoir
FileExtension,FilePathetFolderPathcomme indiqué dans capture d'écran #1. - sur les gestionnaires de connexion du paquet, créez une connexion OLE DB nommée
SQLServerpour vous connecter à l'Instance de SQL Server comme indiqué dans la capture d'écran #2. - Sur le
Control Flowonglet, placer unForeach loop containeretData Flow Taskdans le conteneur de boucle D'avant-champ comme indiqué dans la capture d'écran #3. - Configurer le
Foreach Loop containercomme montré dans screenshots # 4 et # 5. - Double-cliquez sur le
Data Flow Taskpour naviguer vers leData Flowonglet. Placer unXML Sourceet uneOLE DB Destinationcomme montré dans screenshot # 6. - Configurer le
XML Sourcecomme montré dans screenshot # 7 et # 8. Le chemin du fichier XML sera récupéré à partir de la variable Chemin. Cette variable sera peuplée parForeach Loop container. - Configurer le
OLE DB Destinationcomme indiqué dans les captures d'écran # 9 et # 10. - Captures d'écran # 11 et # 12 afficher l'exécution du package.
- Capture d'écran # 13 affiche les données de la table avant l'exécution du paquet. Capture d'écran # 14 affiche les données de la table après l'exécution du paquet. Les données dans la table
dbo.Itemscontient maintenant les données présentes dans trois XML fichier.
j'Espère que vous aide.
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>
XML Files
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 #6:

Capture d'écran #7:

Capture d'écran n ° 8:

Capture d'écran n ° 9:

Capture d'écran n ° 10:

Capture d'écran # 11:

Capture d'écran n ° 12:

Capture d'écran n ° 13:

Capture d'écran #14:

vous devez aussi ajouter @[user::FilePath][XML Source].[XMLData] dans la tâche de flux de données ou l'emballage dit aucun fichier source trouvé après l'exécution du paquet.