none
Duvida Importação TXT - Import and Export RRS feed

  • Pergunta

  • Boa tarde!

    Estou com uma duvida em relação a importação de dados atraves do import and export data.

    Tenho um arquivo com 500 mil linhas, e preciso importar para uma tabela. Quando utilizo a ferramenta import and export data do sql, apos selecionar o data source (Flat File) selecionoa o metodo Delimitado por Tab e o SQL ja separa as colunas. Até aqui tranquilo, mas minha primeira duvida é, se o arquivo vai se importado delimitado por tab, é normal o sql atribuir a propriedade de cada campo com o tamanho de varchar (50)?

    Quando avanço para as telas seguintes, o assistente ja interpreta a propriedade dos campos para criar a tabela, inclusive o formato VARCHAR(50) porem na quando executo ele gera erro de Truncate. A segunda pergunta é se o proprio SQL definiu o tamanho do campo quando leu o arquivo e criou a tabela de acordo com este tamanho ele deveria dar o erro de truncate? Pelo assistente consigo definir ignorar o trucante? Para arquivos grandes como fazer para saber o tamanho do campo quanto esta delimitado por tab?

    abs e aguardo muito a ajuda de vcs.

    domingo, 21 de dezembro de 2014 16:27

Respostas

  • Fernando,

    Vou responder suas perguntas por partes:

    é normal o sql atribuir a propriedade de cada campo com o tamanho de varchar (50)?

    Sim, quando o assistente não identifica um data type para a coluna, então é definido o padrão para importação como "varchar(50)";

    o assistente ja interpreta a propriedade dos campos para criar a tabela, inclusive o formato VARCHAR(50) porem na quando executo ele gera erro de Truncate

    Bom, como eu disse o assistente determinou o data type padrão, mas ele é um "assistente" que define alternativas baseado em uma pequena amostra de registros. Então existem casos que pode ocorrer o TRUNCATE. Como você está importando um arquivo, eu recomendo que você crie uma tabela nova (basta escrever o nome no "Destino" e o ícone vai alterar, indicando que será criada a tabela) e então crie às colunas com o data type adequado (se existir dúvidas sobre o conteúdo de cada coluna, importe como varchar e dentro do SQL e após carregar os dados nesta tabela temporária você modifica para o data type ideal inserindo para a tabela definitiva). Veja na imagem abaixo:

    se o proprio SQL definiu o tamanho do campo quando leu o arquivo e criou a tabela de acordo com este tamanho ele deveria dar o erro de truncate?

    Como disse na resposta anterior, é possível porque ele avalia a "proposta" de data type baseado em uma pequena amostra.

    Pelo assistente consigo definir ignorar o trucante?

    Sim, mas apenas caso o Assistente identifique que é possível ocorrer perda de dados deste modo (Ex.: você converter uma coluna texto com o data type "int" - mesmo que todo conteúdo seja numérico, se ele encontrar uma "sujeira" ele vai habilitar esta opção), então você poderá selecionar uma coluna (ou todas) e definir para o Assistente "Falhar" caso encontre inconsistencia ou "Ignorar", podendo ocorrer perda de dados. Caso contrário, se o Assistente não identificar que poderá ocorrer perda de dados ele não exibe esta janela, e só poderá exibir caso ocorra falha na importação (em uma 2ª tentativa).

    Para arquivos grandes como fazer para saber o tamanho do campo quanto esta delimitado por tab?

    Se a coluna e delimitada por tab, então o arquivo pode ter um tamanho fixo para cada coluna. Analise o conteúdo do arquivo e verifique este padrão. Caso você não consiga determinar um padrão para cada coluna então você poderá utilizar o "varchar(max)". Veja o print abaixo:

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    segunda-feira, 22 de dezembro de 2014 11:44
    Moderador