Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SSIS liest mehrere XML-Dateien aus dem Ordner

Hier ist eine mögliche Option, die zeigt, wie mehrere XML-Dateien mit derselben Definition in eine SQL Server-Tabelle geladen werden. Das Beispiel verwendet SQL Server 2008 R2 und SSIS 2008 R2 . Das hier gezeigte Beispiel lädt drei XML-Dateien mithilfe von SSIS Data Flow Task in eine SQL-Tabelle mit Hilfe von XML Source Komponente.

Schritt-für-Schritt-Prozess:

  1. Erstellen Sie eine Tabelle namens dbo.Items mit dem unter SQL-Skripts angegebenen Skript Abschnitt.
  2. Erstellen Sie eine XSD-Datei namens Items.xsd im Ordnerpfad C:\temp\xsd unter Verwendung der unter XSD-Datei bereitgestellten Inhalte Abschnitt.
  3. Erstellen Sie drei XML-Dateien, nämlich Items_1.xml , Items_2.xml und Items_3.xml im Ordnerpfad C:\temp\xml unter Verwendung der unter XML-Dateien bereitgestellten Inhalte Abschnitt.
  4. Erstellen Sie auf dem Paket 3 Variablen, nämlich FileExtension , FilePath und FolderPath wie in Screenshot #1 gezeigt .
  5. Erstellen Sie in den Verbindungs-Managern des Pakets eine OLE DB-Verbindung mit dem Namen SQLServer um sich mit der SQL Server-Instanz zu verbinden, wie in Screenshot #2 gezeigt .
  6. Auf dem Control Flow platzieren Sie einen Foreach loop container und eine Data Flow Task innerhalb des Foreach-Schleifencontainers, wie in Screenshot #3 gezeigt .
  7. Konfigurieren Sie den Foreach Loop container wie in Screenshots #4 gezeigt und #5 .
  8. Doppelklicken Sie auf die Data Flow Task um zum Data Flow zu navigieren Tab. Platzieren Sie eine XML Source Komponente und ein OLE DB Destination wie in Screenshot #6 gezeigt .
  9. Konfigurieren Sie die XML Source wie in Screenshot #7 gezeigt und #8 . Der XML-Dateipfad wird aus der Variable FilePath abgerufen . Diese Variable wird vom Foreach Loop container gefüllt . Hinweis: In späteren Versionen von Visual Studio wird XML Source wird Fehler aufgrund der ValidateExternalMetadata-Eigenschaft. Um dies zu beheben, klicken Sie einmal auf „XML-Quelle“, dann auf Eigenschaften und setzen Sie ValidateExternalMetadata auf False .
  10. Konfigurieren Sie das OLE DB Destination wie in Screenshots #9 gezeigt und #10 .
  11. Screenshots Nr. 11 und #12 Zeigt die Paketausführung an.
  12. Screenshot #13 zeigt die Tabellendaten vorher die Paketausführung. Screenshot Nr. 14 zeigt die Tabellendaten nach die Paketausführung. Die Daten in der Tabelle dbo.Items enthält nun die vorhandenen Daten in drei XML-Dateien.

Hoffe das hilft.

SQL-Skripts:

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

XSD-Datei

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

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>

Screenshot 1:

Screenshot Nr. 2:

Screenshot 3:

Screenshot #4:

Screenshot Nr. 5:

Screenshot Nr. 6:

Screenshot #7:

Screenshot #8:

Screenshot Nr. 9:

Screenshot Nr. 10:

Screenshot Nr. 11:

Screenshot Nr. 12:

Screenshot Nr. 13:

Screenshot Nr. 14: