sql >> Base de Datos >  >> RDS >> Sqlserver

SSIS leyendo múltiples archivos xml de la carpeta

Aquí hay una opción posible que demuestra cómo cargar múltiples archivos XML que tienen la misma definición en una tabla de SQL Server. El ejemplo usa SQL Server 2008 R2 y SSIS 2008 R2 . El ejemplo que se muestra aquí carga tres archivos XML en una tabla SQL usando SSIS Data Flow Task con la ayuda de XML Source componente.

Proceso paso a paso:

  1. Cree una tabla llamada dbo.Items utilizando el script proporcionado en Scripts SQL sección.
  2. Cree un archivo XSD llamado Items.xsd en la ruta de la carpeta C:\temp\xsd utilizando el contenido proporcionado en Archivo XSD sección.
  3. Cree tres archivos XML, a saber, Items_1.xml , Items_2.xml y Items_3.xml en la ruta de la carpeta C:\temp\xml utilizando el contenido proporcionado en Archivos XML sección.
  4. En el paquete, cree 3 variables, a saber, FileExtension , FilePath y FolderPath como se muestra en la captura de pantalla #1 .
  5. En los administradores de conexión del paquete, cree una conexión OLE DB llamada SQLServer para conectarse a la instancia de SQL Server como se muestra en la captura de pantalla #2 .
  6. En el Control Flow pestaña, coloque un Foreach loop container y una Data Flow Task dentro del contenedor de bucle Foreach como se muestra en la captura de pantalla #3 .
  7. Configurar el Foreach Loop container como se muestra en las capturas de pantalla #4 y #5 .
  8. Haga doble clic en la Data Flow Task para navegar al Data Flow pestaña. Coloque una XML Source componente y un OLE DB Destination como se muestra en la captura de pantalla #6 .
  9. Configurar el XML Source como se muestra en la captura de pantalla #7 y #8 . La ruta del archivo XML se recuperará de la variable FilePath . Esta variable se completará con el Foreach Loop container . Nota: En versiones posteriores de Visual Studio, XML Source será error debido a la propiedad ValidateExternalMetadata. Para solucionar esto, haga clic en "Origen XML" y luego en Propiedades y establezca ValidateExternalMetadata en False. .
  10. Configurar el OLE DB Destination como se muestra en las capturas de pantalla #9 y #10 .
  11. Capturas de pantalla n.°11 y #12 mostrar la ejecución del paquete.
  12. Captura de pantalla n.°13 muestra los datos de la tabla antes la ejecución del paquete. Captura de pantalla n.º 14 muestra los datos de la tabla después la ejecución del paquete. Los datos de la tabla dbo.Items ahora contiene los datos presentes en tres archivos XML.

Espero que ayude.

Secuencias de comandos 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

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

Archivos XML

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

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

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

Captura de pantalla n.º 1:

Captura de pantalla n.º 2:

Captura de pantalla n.º 3:

Captura de pantalla n.º 4:

Captura de pantalla n.º 5:

Captura de pantalla n.º 6:

Captura de pantalla n.º 7:

Captura de pantalla n.º 8:

Captura de pantalla n.° 9:

Captura de pantalla n.º 10:

Captura de pantalla n.º 11:

Captura de pantalla n.º 12:

Captura de pantalla n.º 13:

Captura de pantalla n.º 14: