Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SSIS lit plusieurs fichiers xml à partir du dossier

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 à l'aide de XML Source composant.

Processus étape par étape :

  1. Créez une table nommée dbo.Items en utilisant le script donné sous Scripts SQL section.
  2. Créez un fichier XSD nommé Items.xsd dans le chemin du dossier C:\temp\xsd en utilisant le contenu fourni sous Fichier XSD section.
  3. Créez trois fichiers XML, à savoir Items_1.xml , Items_2.xml et Items_3.xml dans le chemin du dossier C:\temp\xml en utilisant le contenu fourni sous Fichiers XML section.
  4. Sur le package, créez 3 variables à savoir FileExtension , FilePath et FolderPath comme indiqué dans la capture d'écran #1 .
  5. Sur les gestionnaires de connexion du package, créez une connexion OLE DB nommée SQLServer pour se connecter à l'instance SQL Server comme indiqué dans la capture d'écran #2 .
  6. Sur le Control Flow , placez un Foreach loop container et une Data Flow Task dans le conteneur de boucle Foreach comme indiqué dans la capture d'écran #3 .
  7. Configurer le Foreach Loop container comme le montrent les captures d'écran #4 et #5 .
  8. Double-cliquez sur la Data Flow Task pour accéder au Data Flow languette. Placer une XML Source composant et une OLE DB Destination comme indiqué dans la capture d'écran #6 .
  9. Configurer la XML Source comme indiqué dans la capture d'écran #7 et #8 . Le chemin du fichier XML sera récupéré à partir de la variable FilePath . Cette variable sera renseignée par le Foreach Loop container . Remarque : Dans les versions ultérieures de Visual Studio, XML Source sera erreur en raison de la propriété ValidateExternalMetadata. Pour résoudre ce problème, cliquez une fois sur "Source XML", puis sur Propriétés et définissez ValidateExternalMetadata sur False .
  10. Configurer la OLE DB Destination comme le montrent les captures d'écran #9 et #10 .
  11. Captures d'écran #11 et #12 montrer l'exécution du package.
  12. Capture d'écran #13 affiche les données du tableau avant l'exécution du paquet. Capture d'écran #14 affiche les données du tableau après l'exécution du paquet. Les données de la table dbo.Items contient maintenant les données présentes dans trois fichiers XML.

J'espère que ça 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>

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 6 :

Capture d'écran n° 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 :