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).