Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SSIS lendo vários arquivos xml da pasta


Aqui está uma opção possível que demonstra como carregar vários arquivos XML com a mesma definição em uma tabela do SQL Server. O exemplo usa SQL Server 2008 R2 e SSIS 2008 R2 . O exemplo mostrado aqui carrega três arquivos XML em uma tabela SQL usando SSIS Data Flow Task com a ajuda de XML Source componente.

Processo passo a passo:
  1. Crie uma tabela chamada dbo.Items usando o script fornecido em Scripts SQL seção.
  2. Crie um arquivo XSD chamado Items.xsd no caminho da pasta C:\temp\xsd usando o conteúdo fornecido em Arquivo XSD seção.
  3. Crie três arquivos XML, chamados Items_1.xml , Items_2.xml e Items_3.xml no caminho da pasta C:\temp\xml usando o conteúdo fornecido em Arquivos XML seção.
  4. No pacote, crie 3 variáveis ​​chamadas FileExtension , FilePath e FolderPath conforme mostrado na captura de tela #1 .
  5. Nos gerenciadores de conexão do pacote, crie uma conexão OLE DB chamada SQLServer para se conectar à instância do SQL Server, conforme mostrado na captura de tela #2 .
  6. No Control Flow guia, coloque um Foreach loop container e uma Data Flow Task dentro do contêiner de loop Foreach, conforme mostrado na captura de tela #3 .
  7. Configure o Foreach Loop container conforme mostrado nas capturas de tela #4 e #5 .
  8. Clique duas vezes na Data Flow Task para navegar até o Data Flow aba. Coloque uma XML Source componente e um OLE DB Destination conforme mostrado na captura de tela nº6 .
  9. Configure a XML Source conforme mostrado na captura de tela nº7 e #8 . O caminho do arquivo XML será recuperado da variável FilePath . Esta variável será preenchida pelo Foreach Loop container . Observação: Em versões posteriores do Visual Studio, XML Source será erro devido à propriedade ValidateExternalMetadata. Para corrigir isso, clique em "Origem XML", depois em Propriedades e defina ValidateExternalMetadata como Falso .
  10. Configure o OLE DB Destination conforme mostrado nas capturas de tela #9 e #10 .
  11. Capturas de tela #11 e #12 mostre a execução do pacote.
  12. Captura de tela #13 mostra os dados da tabela antes a execução do pacote. Captura de tela nº14 mostra os dados da tabela depois a execução do pacote. Os dados na tabela dbo.Items agora contém os dados presentes em três arquivos XML.

Espero que ajude.

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

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

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

Captura de tela nº 1:



Captura de tela nº 2:



Captura de tela nº 3:



Captura de tela nº 4:



Captura de tela nº 5:



Captura de tela nº 6:



Captura de tela nº 7:



Captura de tela nº 8:



Captura de tela nº 9:



Captura de tela nº 10:



Captura de tela nº 11:



Captura de tela nº 12:



Captura de tela nº 13:



Captura de tela nº 14: