Primeiro: o que é um format file? É um arquivo que contém a estrutura dos dados armazenados em um flat file.

Ops… o que é um flat file? É um arquivo onde os dados não seguem uma estrutura relacional - seguem uma estrutura posicional.

Um exemplo (parcial) de um flat file é:


…
441@ADAPTADOR BLUETOOTH ENCORE CLASS 2@110.00
311@ADAPTADOR RCA 2F / 2F@1.00
500@ADAPTADOR UHF@25.00
528@ADAPTADOR USB G WIRELESS KAIOMY@99.00
134@ADAPTADOR VHSC / VHS ELETRICO@49.00
510@ADAPTADOR WIRELESS USB G ENCORE@100.00
51@APLICADOR ETIQUETA CD CARD PIMACO@13.00
…

O que podemos deduzir a partir desse fragmento de arquivo? Que contém produtos. Que cada linha representa um produto diferente. Que a primeira coluna talvez represente o código do produto. Que a segunda coluna é o nome do produto. Que a terceira coluna (talvez) representa o preço do produto. Que o símbolo @ separa uma coluna da outra.

OK… para isso é que existe a documentação de sistemas. Mas deduzimos corretamente, dessa vez. E como eu “falo” para o SQL Server que ele deve usar o arroba, que o arquivo tem três colunas? Usando o format file. Podemos gerar um format file em formato XML ou texto (nonXML).

No exemplo abaixo, crio um arquivo de formato a partir databela de produtos, usando um aplicativo de prompt chamado BCP (bulk copy program). Para usá-lo, abra o prompt de comando (DOS), digite o comando e dê um ENTER.


BCP EXEMPLO_COPIA..PRODUTO FORMAT NUL -c -t\t -f produtosTab.fmt -T

O arquivo gerado tem o seguinte conteúdo:


9.0
3
1       SQLCHAR       0       12      “\t”     1     COD            “”
2       SQLCHAR       0       50      “\t”     2     NOME           SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       41      “\r\n”   3    PRECO          “”

Onde:

  • Aprimeira linha contém a versão do bcp usado (9.0 = SQL SERVER 2005);
  • a segunda linha contém a quantidade de colunas do flat file;
  • a partir daí, temos a definição das características de cada coluna, uma por linha:
    • a primeira coluna representa a ordem da coluna no arquivo flat;
    • a segunda coluna representa o tipo do dado (se o flat file estiver em formato caractere, usamos sempre o SQL CHAR - se estiver em formato nativo, usamos os tipos do SQL Server;
    • a terceira coluna representa o offset;
    • a quarta informa o tamanho máximo da coluna;
    • a quinta, o separador;
    • a sexta contém a ordem da coluna no destino - o número 0 informa que não queremos importar essa coluna;
    • a sétima coluna contém o nome do campo;
    • a oitava coluna contémo collation do campo (para campos texto, claro).

Confira também