Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SSIS che legge più file XML dalla cartella

Ecco una possibile opzione che mostra come caricare più file XML con la stessa definizione in una tabella di SQL Server. L'esempio utilizza SQL Server 2008 R2 e SSIS 2008 R2 . L'esempio mostrato qui carica tre file XML in una tabella SQL usando SSIS Data Flow Task con l'aiuto di XML Source componente.

Procedura dettagliata:

  1. Crea una tabella denominata dbo.Items utilizzando lo script fornito in Script SQL sezione.
  2. Crea un file XSD denominato Items.xsd nel percorso della cartella C:\temp\xsd utilizzando il contenuto fornito in File XSD sezione.
  3. Crea tre file XML ovvero Items_1.xml , Items_2.xml e Items_3.xml nel percorso della cartella C:\temp\xml utilizzando i contenuti forniti in File XML sezione.
  4. Sul pacchetto, crea 3 variabili ovvero FileExtension , FilePath e FolderPath come mostrato nella schermata #1 .
  5. Nei Connection Manager del pacchetto, creare una connessione OLE DB denominata SQLServer per connettersi all'istanza di SQL Server come mostrato nella schermata #2 .
  6. Sul Control Flow scheda, inserisci un Foreach loop container e un Data Flow Task all'interno del contenitore del ciclo Foreach, come mostrato nello screenshot n. 3 .
  7. Configura il Foreach Loop container come mostrato negli screenshot #4 e #5 .
  8. Fai doppio clic su Data Flow Task per passare al Data Flow scheda. Inserisci un XML Source componente e una OLE DB Destination come mostrato nella schermata #6 .
  9. Configura il XML Source come mostrato nella schermata #7 e #8 . Il percorso del file XML verrà recuperato dalla variabile FilePath . Questa variabile verrà popolata dal Foreach Loop container . Nota: Nelle versioni successive di Visual Studio, XML Source sarà errore dovuto alla proprietà ValidateExternalMetadata. Per risolvere questo problema, fai clic su "Sorgente XML", quindi su Proprietà e imposta ValidateExternalMetadata su False .
  10. Configura la OLE DB Destination come mostrato negli screenshot #9 e #10 .
  11. Schermate #11 e #12 mostra l'esecuzione del pacchetto.
  12. Schermata #13 mostra i dati della tabella prima l'esecuzione del pacchetto. Screenshot n. 14 mostra i dati della tabella dopo l'esecuzione del pacchetto. I dati nella tabella dbo.Items ora contiene i dati presenti in tre file XML.

Spero di esserti stato d'aiuto.

Script 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

File 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>

File XML

Elementi_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>

Elementi_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>

Elementi_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>

Schermata n. 1:

Schermata n. 2:

Schermata n. 3:

Schermata n. 4:

Schermata n. 5:

Schermata n. 6:

Schermata n. 7:

Schermata n. 8:

Schermata n. 9:

Schermata n. 10:

Schermata n. 11:

Schermata n. 12:

Schermata n. 13:

Schermata n. 14: