none
Importação Bulk Insert RRS feed

  • Pergunta

  • Galera,

    estou quebrando a kbç para importar esse simples arquivo txt como teste para uma tabela no SQL 2005.

    UF
    RR
    RR
    RR

    Porém estou utilizando a opção onde montamos o layout do arquivo txt vide abaixo.
    9.0
    1
    1       SQLNCHAR      2       100           1     Name                     SQL_Latin1_General_CP1_CI_AS

    Estou tendo o seguinte erro:

    [Bulk Insert Task] Error: An error occurred with the following error message: "Cannot bulk load. Invalid destination table column number for source column 1 in the format file "D:\FIXA_PA_PI_RN_SE\Format1.fmt".".


    Já validei e a tabela somente possui esse campo. Pq não estou conseguindo importar?


    Daniel
    sexta-feira, 6 de fevereiro de 2009 16:33

Respostas

  •  Olá,

    Configura o arquivo no formato que eu coloquei.

    Fiz aqui e funcionou. Veja o exemplo:

    CREATE TABLE tbTeste(  
        id varchar(10) not NULL 
    )   
    GO  
     
    BULK INSERT tbTeste  
    FROM 'c:\teste.txt' 
    WITH (FORMATFILE = 'c:\teste.fmt');  
    GO  
     
    select * from tbTeste  
     
     

    Meu arquivo de formato está assim:

    9.0
    1
    1       SQLCHAR      0       100      "\r\n"   1     Name                     SQL_Latin1_General_CP1_CI_AS

    E os dados assim:

    a
    b
    c
    d
    f


    Abraços


    Demétrio Silva
    • Sugerido como Resposta Demétrio Silva segunda-feira, 9 de fevereiro de 2009 18:35
    • Marcado como Resposta dralves terça-feira, 10 de fevereiro de 2009 12:12
    sexta-feira, 6 de fevereiro de 2009 20:12
  • Você criou a tabela que passei para testar? Criou tudo que passei? Até mesmo o arquivo txt?

    Qual a versão de seu SQL Server? se for 2000 você deve usar 8.0 ao invés de 9.0.

    Outra opção seria não utilizar arquivo de formatação e fazer diretamente assim:

    BULK INSERT tbTeste  
       FROM 'c:\teste.txt'    
       WITH   
          (  
             ROWTERMINATOR ='\n' 
          ) 

    Abraços
    Demétrio Silva
    • Sugerido como Resposta Demétrio Silva segunda-feira, 9 de fevereiro de 2009 18:35
    • Marcado como Resposta dralves terça-feira, 10 de fevereiro de 2009 12:12
    sexta-feira, 6 de fevereiro de 2009 20:29

Todas as Respostas

  • Olá,

    Posta o código que você está usando.

    Abraços
    Demétrio Silva
    sexta-feira, 6 de fevereiro de 2009 16:43
  • Demetrio,


    desculpa eu não tinha visto a sua resposta. Estou com algum problema na visualização dos meus Threads.

    Segue o código e a nova mensagem de erro.

    BULK INSERT dbo.D_Faturas_BA_Fixa

    FROM 'D:\FIXA_PA_PI_RN_SE\RR2.txt'

    WITH (FORMATFILE = 'D:\FIXA_PA_PI_RN_SE\Format1.Fmt');

    GO

    SELECT * FROM dbo.D_Faturas_BA_Fixa;

    ERRO:

    Msg 4862, Level 16, State 1, Line 1

    Cannot bulk load because the file "D:\FIXA_PA_PI_RN_SE\Format1.Fmt" could not be read. Operating system error code (null).


    Daniel
    sexta-feira, 6 de fevereiro de 2009 18:09
  •  Possivelmente é algum problema de permissões de acesso à pasta.

    Verifique se o usuário que está rorando o SQL Server possui as devidas permissões.

     

    Abraços


    Demétrio Silva
    sexta-feira, 6 de fevereiro de 2009 18:35
  • Já vi isso tb.

    O usuario sou eu mesmo e o banco e a pasta compartilhada estão na minha máquina.

    Quando rodo sem especificar o arquivo de formatação pelo Bulk Insert funciona corretamente.

    Tem alguma ideia?
    Daniel
    sexta-feira, 6 de fevereiro de 2009 18:45
  • Olá,

    Posta o conteúdo do teu arquivo de formatação.

    Abraços
    Demétrio Silva
    sexta-feira, 6 de fevereiro de 2009 18:59
  • Segue Conteudo do arquivo Format1.Fmt

    9.0
    1
    1       SQLCHAR      2       100      ""   1     Name                     SQL_Latin1_General_CP1_CI_AS
    Daniel
    sexta-feira, 6 de fevereiro de 2009 19:00
  • Olá,

    Seu terminador é vazio?

    "1       SQLCHAR      2       100      ""   1     Name                     SQL_Latin1_General_CP1_CI_AS"

    Especifique algo do tipo "," ou "\t" ou "\r\n", etc.

    Abraços


    Demétrio Silva
    • Editado Demétrio Silva sexta-feira, 6 de fevereiro de 2009 19:10 Erro de aspas
    sexta-feira, 6 de fevereiro de 2009 19:08
  • Mais este terminator não é para a coluna? Como não tenho outra coluna deixei vazio vide arquivo abaixo:

    UF
    RR

    Especifiquei todos os caracteres que vc indicou mais a mensagem ainda continua a mesma vide abaixo:

    Msg 4862, Level 16, State 1, Line 1

    Cannot bulk load because the file "D:\FIXA_PA_PI_RN_SE\Format1.Fmt" could not be read. Operating system error code (null).

     


    Daniel
    sexta-feira, 6 de fevereiro de 2009 19:16
  • Alquem tem ideia?
    Daniel
    sexta-feira, 6 de fevereiro de 2009 19:49
  • Não é para coloar todos não,

    Deixa nessa forma assim:

    9.0
    1
    1       SQLCHAR      0       100      "\r\n"   1     Name                     SQL_Latin1_General_CP1_CI_AS

    Abraços
    Demétrio Silva
    sexta-feira, 6 de fevereiro de 2009 19:52
  • Não entendi quando vc falou em colocar todos?

    Tentei com o seu exemplo e a mesma mensagem.

    [Bulk Insert Task] Error: An error occurred with the following error message: "Cannot bulk load because the file "C:\daniel\SQL\Format1.Fmt" could not be read. Operating system error code (null).".

    Será que tem alguma coisa a ver com o banco? Porém quando rodo pelo SISS no modo Wizard que ele mesmo já coloca a especificação e delimitações necessarias ele importa.

    Mais alguem?
    Daniel
    sexta-feira, 6 de fevereiro de 2009 19:59
  •  Olá,

    Configura o arquivo no formato que eu coloquei.

    Fiz aqui e funcionou. Veja o exemplo:

    CREATE TABLE tbTeste(  
        id varchar(10) not NULL 
    )   
    GO  
     
    BULK INSERT tbTeste  
    FROM 'c:\teste.txt' 
    WITH (FORMATFILE = 'c:\teste.fmt');  
    GO  
     
    select * from tbTeste  
     
     

    Meu arquivo de formato está assim:

    9.0
    1
    1       SQLCHAR      0       100      "\r\n"   1     Name                     SQL_Latin1_General_CP1_CI_AS

    E os dados assim:

    a
    b
    c
    d
    f


    Abraços


    Demétrio Silva
    • Sugerido como Resposta Demétrio Silva segunda-feira, 9 de fevereiro de 2009 18:35
    • Marcado como Resposta dralves terça-feira, 10 de fevereiro de 2009 12:12
    sexta-feira, 6 de fevereiro de 2009 20:12
  • Cara não sei o que está acontecendo.

    Fiz exatamente o que você mandou e olha o erro...PQP.....Tô ficando P.....

    Msg 4862, Level 16, State 1, Line 7

    Cannot bulk load because the file "c:\teste.fmt" could not be read. Operating system error code (null).


    Daniel
    sexta-feira, 6 de fevereiro de 2009 20:20
  • Você criou a tabela que passei para testar? Criou tudo que passei? Até mesmo o arquivo txt?

    Qual a versão de seu SQL Server? se for 2000 você deve usar 8.0 ao invés de 9.0.

    Outra opção seria não utilizar arquivo de formatação e fazer diretamente assim:

    BULK INSERT tbTeste  
       FROM 'c:\teste.txt'    
       WITH   
          (  
             ROWTERMINATOR ='\n' 
          ) 

    Abraços
    Demétrio Silva
    • Sugerido como Resposta Demétrio Silva segunda-feira, 9 de fevereiro de 2009 18:35
    • Marcado como Resposta dralves terça-feira, 10 de fevereiro de 2009 12:12
    sexta-feira, 6 de fevereiro de 2009 20:29
  • Estou usando estas versões

    Microsoft SQL Server Management Studio      9.00.3042.00
    Microsoft Analysis Services Client Tools      2005.090.3042.00
    Microsoft Data Access Components (MDAC)      2000.085.1132.00 (xpsp.080413-0852)
    Microsoft MSXML      2.6 3.0 5.0 6.0
    Microsoft Internet Explorer      7.0.5730.13
    Microsoft .NET Framework      2.0.50727.1433
    Operating System      5.1.2600

    Eu fiz exatamente o que você mandou. Tentei com  o exemplo que você mandou e funcionou GRAÇAS A DEUS e a você é lógico...rsrsrsrs

    Agora tem um probleminha eu queria era criar um arquivo de formatação, pois no meu arquivo de origem eu tenho outras colunas, ou seja, existe coluna que no arquivo está como Char e na tabela como BigInt.

    Portanto como vou usar o exemplo que você me passou para estas colunas que precisam ser formatadas?

    Aguardo retorno
    Daniel
    sexta-feira, 6 de fevereiro de 2009 20:42
  •  Galera,

    ainda continuo no aguardo
    Daniel
    sexta-feira, 6 de fevereiro de 2009 22:02
  • Olá,

    Você pode alterar o arquivo de formato acima para que no lugar de SQLCHAR fique SQLDATETIME, para campos datetime. Recomendo que você dê uma olhada no BOL para um maior entendimento sobre Bulk Insert.

    O arquivo de formato também pode ser XML e não só .fmt. Dê uma olhada nisso no BOL também.

    Abraços
    Demétrio Silva
    • Sugerido como Resposta Demétrio Silva segunda-feira, 9 de fevereiro de 2009 18:35
    segunda-feira, 9 de fevereiro de 2009 13:57
  • DrAlves,

    Não é uma boa prática duplicar posts, minhas respostas lhe ajudaram?

    Abraços


    Demétrio Silva
    terça-feira, 10 de fevereiro de 2009 11:56