Março 8, 2010

SQLServer Importar ficheiros em vários formatos

Posted in SQL Server às 16:23 por Henrry Pires

Dois ficheiros, uma tabela e o mesmo código de importação. Parece uma parceria pouco provável, mas…feliz ou infelizmente a sempre um mas, desta vez felizmente. Um dos parâmetros que o BULK
INSERT aceita é um ficheiro de formatação FORMATFILE. Vamos então por dois exemplos a funcionar. Ficheiro1:

  • Origem dos Dados
    Helena Ramos Pires, Lena5001@gmail.com Suasana
    Maria Ferreira, suFerreira@gmail.com
    Alvaro Luís Ramos, alramos@gmail.com
  • Formatação

    <?xml version=”1.0″ ?>

    <BCPFORMAT xmlns=”http://schemas.microsoft.com/sqlserver/2004/bulkload/format xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“>

    <RECORD>

    <FIELD
    ID=”1 xsi:type=”CharTerm TERMINATOR=”, MAX_LENGTH=”29 COLLATION=”SQL_Latin1_General_CP1_CI_AS” />

    <FIELD
    ID=”2 xsi:type=”CharTerm TERMINATOR=”\r\n MAX_LENGTH=”33 COLLATION=”SQL_Latin1_General_CP1_CI_AS” />

    </RECORD>

    <ROW>

    <COLUMN
    SOURCE=”1 NAME=”Nome xsi:type=”SQLNVARCHAR” />

    <COLUMN
    SOURCE=”2 NAME=”Mail xsi:type=”SQLNVARCHAR” />

    </ROW>

    </BCPFORMAT>

Ficheiro2:

  • Origem dos dados

    Helena Ramos Pires          |Lena5001@gmail.com               #Suasana Maria Ferreira      |suFerreira@gmail.com             #Alvaro Luís Ramos           |alramos@gmail.com               

  • Formatação

<?xml version=”1.0″ ?>

<BCPFORMAT xmlns=”http://schemas.microsoft.com/sqlserver/2004/bulkload/format xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“>

<RECORD>

<FIELD
ID=”1 xsi:type=”CharTerm TERMINATOR=”| LENGTH=”29 COLLATION=”SQL_Latin1_General_CP1_CI_AS” />

<FIELD
ID=”2 xsi:type=”CharTerm TERMINATOR=”# LENGTH=”33 COLLATION=”SQL_Latin1_General_CP1_CI_AS” />

</RECORD>

<ROW>

<COLUMN
SOURCE=”1 NAME=”Nome xsi:type=”SQLNVARCHAR” />

<COLUMN
SOURCE=”2 NAME=”Mail xsi:type=”SQLNVARCHAR” />

</ROW>

</BCPFORMAT>

Após uma rápida vista de olhos nos ficheiros temos o seguinte. No 1º ficheiro as colunas são separadas por ‘,’ e as linhas por ‘\n\r’, conforme indicado pela última coluna. Com relação ao segundo ficheiro podemos notar que as colunas são de tamanho fixo (parâmetro LENGTH), e as colunas são separadas por ‘|’, sendo o delimitador de linha o caracter ‘#’
Tendo então então os ficheiro preparados bastaria executar o código a seguir, para importar qualquer um dos ficheiros sem ter que nos preocupar com o formato

DECLARE @SourceFile        VarChar(256)
DECLARE @FormatFile VarChar(256)
DECLARE @ExecuteComand NVarChar(515) SELECT @SourceFile = '''C:\Ficheiro1.csv''', @FormatFile = '''c:\Formato1.xml''' SELECT @ExecuteComand = N'BULK INSERT DestTable FROM ' + @SourceFile + ' WITH (FORMATFILE = ' + @FormatFile + ')' EXEC SP_ExecuteSQL @ExecuteComand

Espero que vos seja de ajuda

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: