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.Items
en utilisant le script donné sous SQL Scripts section. - créer un fichier XSD nommé
Items.xsd
dans 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.xml
etItems_3.xml
dans le dossier C:\temp\xml en utilisant le contenu fourni sous XML Files section. - sur le paquet, créez 3 variables à savoir
FileExtension
,FilePath
etFolderPath
comme indiqué dans capture d'écran #1. - sur les gestionnaires de connexion du paquet, créez une connexion OLE DB nommée
SQLServer
pour vous connecter à l'Instance de SQL Server comme indiqué dans la capture d'écran #2. - Sur le
Control Flow
onglet, placer unForeach loop container
etData Flow Task
dans le conteneur de boucle D'avant-champ comme indiqué dans la capture d'écran #3. - Configurer le
Foreach Loop container
comme montré dans screenshots # 4 et # 5. - Double-cliquez sur le
Data Flow Task
pour naviguer vers leData Flow
onglet. Placer unXML Source
et uneOLE DB Destination
comme montré dans screenshot # 6. - Configurer le
XML Source
comme 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 Destination
comme 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.Items
contient 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.