sql >> Database >  >> RDS >> Sqlserver

SSIS leest meerdere xml-bestanden uit de map

Hier is een mogelijke optie die laat zien hoe meerdere XML-bestanden met dezelfde definitie in een SQL Server-tabel kunnen worden geladen. Het voorbeeld gebruikt SQL Server 2008 R2 en SSIS 2008 R2 . Het hier getoonde voorbeeld laadt drie XML-bestanden in een SQL-tabel met behulp van SSIS Data Flow Task met behulp van XML Source onderdeel.

Stapsgewijs proces:

  1. Maak een tabel met de naam dbo.Items met behulp van het script gegeven onder SQL-scripts sectie.
  2. Maak een XSD-bestand met de naam Items.xsd in het mappad C:\temp\xsd met behulp van de inhoud onder XSD-bestand sectie.
  3. Maak drie XML-bestanden, namelijk Items_1.xml , Items_2.xml en Items_3.xml in het mappad C:\temp\xml met behulp van de inhoud onder XML-bestanden sectie.
  4. Maak op het pakket 3 variabelen, namelijk FileExtension , FilePath en FolderPath zoals getoond in screenshot #1 .
  5. Maak in de verbindingsmanagers van het pakket een OLE DB-verbinding met de naam SQLServer om verbinding te maken met de SQL Server-instantie zoals weergegeven in screenshot #2 .
  6. Op de Control Flow tab, plaats een Foreach loop container en een Data Flow Task binnen de Forreach-luscontainer zoals weergegeven in screenshot #3 .
  7. Configureer de Foreach Loop container zoals getoond in screenshots #4 en #5 .
  8. Dubbelklik op de Data Flow Task om naar de Data Flow te navigeren tabblad. Plaats een XML Source component en een OLE DB Destination zoals getoond in screenshot #6 .
  9. Configureer de XML Source zoals getoond in screenshot #7 en #8 . Het XML-bestandspad wordt opgehaald uit de variabele FilePath . Deze variabele wordt gevuld door de Foreach Loop container . Opmerking: In latere versies van Visual Studio zal XML Source zal fout uit vanwege de eigenschap ValidateExternalMetadata. Om dit op te lossen, klikt u één keer op "XML-bron" en vervolgens op Eigenschappen en stelt u ValidateExternalMetadata in op False .
  10. Configureer de OLE DB Destination zoals getoond in screenshots #9 en #10 .
  11. Schermafbeeldingen #11 en #12 toon de uitvoering van het pakket.
  12. Screenshot #13 toont de tabelgegevens voor de pakketuitvoering. Schermafbeelding #14 toont de tabelgegevens na de pakketuitvoering. De gegevens in de tabel dbo.Items bevat nu de gegevens die aanwezig zijn in drie XML-bestanden.

Ik hoop dat dat helpt.

SQL-scripts:

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

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

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 #2:

Screenshot #3:

Screenshot #4:

Screenshot #5:

Screenshot #6:

Screenshot #7:

Screenshot #8:

Screenshot #9:

Schermafbeelding #10:

Screenshot #11:

Schermafbeelding #12:

Screenshot #13:

Screenshot #14:




  1. Een PostgreSQL-reeks naar een veld maken (wat niet de ID van de record is)

  2. hoe het hiërarchische menu van mysql . te krijgen

  3. Grootte van alle tabellen in de database ophalen

  4. Oracle raise_application_error foutnummer best practice