none
Exportando (BCP) RRS feed

  • Pergunta

  • Olá Colegas,

    Estive vendo algumas questões relacionadas ao utilitário BCP e percebi que existem várias, no entanto a minha se torna fácil, porém estou com dificuldades em resolver-la, veja só:

    use

     

     

    tempdb

    create

     

    table teste

    (

     

    cod int,

    nome

    varchar(30),

    data

    datetime)

    go

    insert

     

    into teste values(1,'chuteira',getdate())

    insert

     

    into teste values(2,'Rede',getdate())

    insert

     

    into teste values(3,'Bola',getdate())

    go

     

    --Cria viso

    create

     

    view Vteste

    as

    select

     

    0 as Prioridade,'cod' as cod,'nome' as nome,'data' as data

    union

     

     

    select

     

    1 as prioridade,convert(varchar(30),cod) as cod,convert(varchar(30),nome) as nome,convert(varchar(30),data) as data from teste

    go

     

    --Gera arquivo

    exec

     

    master..xp_cmdshell 'bcp "select cod,nome,data from [tempdb]..Vteste" queryout "c:\teste.xls" -c -T -S[LUCASSOUZA-PC] -U[utest] -P[123]'

     

     

     


    Quando executo isso, recebo:
    output
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    SQLState = 08001, NativeError = 53
    Error = [Microsoft][SQL Server Native Client 10.0]Named Pipes Provider: Could not open a connection to SQL Server [53].
    SQLState = 08001, NativeError = 53
    Error = [Microsoft][SQL Server Native Client 10.0]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is config
    ured to allow remote connections. For more information see SQL Server Books Online.
    SQLState = S1T00, NativeError = 0
    Error = [Microsoft][SQL Server Native Client 10.0]Login timeout expired
    NULL

    (8 row(s) affected)

    O Login conforme indicado tem a permissão sysadmin, o que me sugerem colegas?
    O objetivo é: Exportar uma tabela para um arquivo .xls, abraço.

    []´s

    Lucas Souza
    http://www.souzalucas.spaces.live.com


    LUCAS SOUZA SARAIVA

    quarta-feira, 16 de setembro de 2009 16:43

Todas as Respostas

  • Lucas,

    Inicialmente não é necessário executar o BCP através do xp_cmdshell, você poderá utilizar o próprio prompt-de-comando do Windows.

    Outra coisa, para você gerar este arquivo no formato xls, você deverá ter o SQL Server Client 10.0 instalado em sua máquina ou seja, é necessário ter o client SQL Server 2008 instalado.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 16 de setembro de 2009 17:46
  • Boa tarde Junior, uma alternativa que pode ser considerada é gerar os registros separados por ponto-e-vírgula e salvar a extensão como CSV. Assim o Microsoft Excel vai importar numa boa.



    Abraço
    Anderson - DBA/MCP/MCTS/MCITP/MCT - Sua pergunta foi respondida ? Marque-a como tal! www.myspace.com/andersondpa
    quarta-feira, 16 de setembro de 2009 17:49
  • Olá Junior,

    no caso se eu quiser exportar para um arquivo .txt, poderia ser assim:
    exec master..xp_cmdshell 'bcp "select cod,nome,data from [tempdb]..Vteste" queryout "c:\teste.txt" -c -T -S[LUCASSOUZA-PC] -U[utest] -P[123]'
    ?

    Porque se for assim estará apresentando o mesmo erro anterior...
    LUCAS SOUZA SARAIVA
    quarta-feira, 16 de setembro de 2009 20:01
  • Lucas,

    Não utilize o exec, vai direto no prompt de comando e execute somente o comando bcp.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 17 de setembro de 2009 14:03
  • Olá Junior,

    estou utilizando: BCP [Adventureworks.Sales.Currency] out "C:\Teste.txt" -T -c.

    ERRO:
    Cannot use the OUTPUT option when passing a constant to a stored procedure.
    LUCAS SOUZA SARAIVA
    quinta-feira, 17 de setembro de 2009 14:59
  • Lucas,

    Tente assim:

    BCP "Select * from Adventureworks.Sales.Currency" out "C:\teste.txt" -T -c
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 18 de setembro de 2009 00:43
  • Olá Lucas,

    Embora o BCP seja um utilitário de carga SQL, ele continua sendo um aplicativo DOS. No mundo DOS, não se utiliza colchetes para tratar delimitações. Você deve utilizar as aspas duplas. Creio que no seu caso seja:

    bcp "select cod,nome,data from [tempdb]..Vteste" queryout "c:\teste.xls" -c -T -S LUCASSOUZA-PC  -U utest -P 123

    Caso houvesse um espaço aí sim você utilizaria aspas duplas. Ex:

    bcp "select cod,nome,data from [tempdb]..Vteste" queryout "c:\teste.xls" -c -T -S LUCASSOUZA-PC  -U utest -P "1 2 3"

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    A armadilha do Backup Diferencial – O que fazer para evitá-la ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!719.entry
    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 18 de setembro de 2009 20:45
  • Olá Junior, deu no mesmo.
    LUCAS SOUZA SARAIVA
    sexta-feira, 18 de setembro de 2009 21:02
  • Gustavo, fiz o mesmo, porém deu o mesmo...
    LUCAS SOUZA SARAIVA
    sexta-feira, 18 de setembro de 2009 21:02
  • Lucas, Primeiramente desmarque a resposta do Gustavo. Agora o erro que esta ocorrendo esta estranho, pois você esta tentando gerar um arquivo txt. Você esta fazendo isso na máquina que possui o SQL Server instalado?
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    domingo, 20 de setembro de 2009 00:38
  • Olá Lucas,

    Acho que substimei o seu problema (embora minhas colocações continuem válidas, pois, no DOS não se usa [ e ] para delimitar nomes).
    Estou vendo alguns erros no seu comando.

    - O BCP por padrão não gera dados no formato xls
    - Se você especifica usuário e senha (-U e -P) não deve tentar conectar-se utilizando a autenticação Windows (-T)

    A título de curiosidade, fiz um BCP executando o seguinte comando.

    bcp "select * from AdventureWorks.dbo.ErrorLog" queryout "e:\res.txt" -c -T -S NDF-GustavoA

    Ele funcionou perfeitamente em minha estação.

    A primeira mensagem de erro "A network-related or instance-specific error has occurred while establishing a connection to SQL Server." refere-se a um problema de conexão e não ao BCP. Sugiro verificar se o serviço está ativo, se os protocolos corretos estão habilitados, etc. Se não for essa a mensagem de erro por favor informe a nova mensagem.

    Se o objetivo é exportar para o Excel, talvez você devesse utilizar o SSIS e não o BCP. Não é que não funcione com o BCP. Se você mudar a extensão para .xls ao invés de .txt irá funcionar. O problema é que um arquivo Excel é um pouco mais do que somente os dados, e quando você abrir o arquivo .xls gerado pelo BCP, o Excel irá "acusar" que o arquivo está corrompido (embora consiga abrí-lo).

    A respeito da "marcação como resposta", eu apenas sugeri meu post como resposta, mas minha sugestão não torna minha resposta como marcada. Qualquer um pode sugerir qualquer coisa como resposta e fiz a sugestão porque realmente achei que o problema era nos delimitadores. Cabe ao dono da dúvida (ou ao moderador quando o dono se omite) marcar aqueles posts que realmente considera como respostas (independente se foram ou não sugeridos como respostas), ou seja, aqueles que de fato resolvem o problema.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    A armadilha do Backup Diferencial – O que fazer para evitá-la ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!719.entry
    Classifique as respostas. O seu feedback é imprescindível
    segunda-feira, 21 de setembro de 2009 02:32
  • Srs, Estou com o mesmo problema.

    Executo o Procedimento BCP e ao abrir o Excel apresenta a mensagem de que o arquivo gerado está em formato diferente ou corrompido.

     

    Se eu gerar em CSV, quais delimitadores devo colocar?

    segunda-feira, 24 de outubro de 2011 20:41
  • Consegui. Se ajudar...........

    Declare

    @sql varchar(1000

    )

    set

    @sql=

    'bcp "Select * from PROJ_CONTROLES_INTERNOS.dbo.Sys_CEP_No_Atende a" queryout "d:\testing.csv" -S MeuServidor\PROJETO_COC -U **** -P ***** -c -t";" '

    print

    @sql

    exec

    xp_cmdshell @sql

     

    segunda-feira, 24 de outubro de 2011 20:43