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.

16
demandé sur Ben 2011-03-01 12:34:57

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:

  1. Créer une table nommée dbo.Items en utilisant le script donné sous SQL Scripts section.
  2. créer un fichier XSD nommé Items.xsd dans le dossier C:\temp\xsd en utilisant le contenu fourni sous fichier XSD section.
  3. créer trois fichiers XML à savoir Items_1.xml,Items_2.xml et Items_3.xml dans le dossier C:\temp\xml en utilisant le contenu fourni sous XML Files section.
  4. sur le paquet, créez 3 variables à savoir FileExtension,FilePath et FolderPath comme indiqué dans capture d'écran #1.
  5. 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.
  6. Sur le Control Flow onglet, placer un Foreach loop container et Data Flow Task dans le conteneur de boucle D'avant-champ comme indiqué dans la capture d'écran #3.
  7. Configurer le Foreach Loop container comme montré dans screenshots # 4 et # 5.
  8. Double-cliquez sur le Data Flow Task pour naviguer vers le Data Flow onglet. Placer un XML Source et une OLE DB Destination comme montré dans screenshot # 6.
  9. 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 par Foreach Loop container.
  10. Configurer le OLE DB Destination comme indiqué dans les captures d'écran # 9 et # 10.
  11. Captures d'écran # 11 et # 12 afficher l'exécution du package.
  12. 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:

1

Capture d'écran #2:

2

Capture d'écran #3:

3

Capture d'écran #4:

4

Capture d'écran #5:

5

Capture d'écran #6:

6

Capture d'écran #7:

7

Capture d'écran n ° 8:

8

Capture d'écran n ° 9:

9

Capture d'écran n ° 10:

10

Capture d'écran # 11:

11

Capture d'écran n ° 12:

12

Capture d'écran n ° 13:

13

Capture d'écran #14:

13

42
répondu 2011-09-14 14:03:12

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.

1
répondu SQLNoSQL 2016-04-28 15:39:50