none
Exportar uma consulta ou conteudo de uma tabela para uma arquivo txt RRS feed

  • Pergunta

  • Pessoal boa tarde, eu fiz varias consultas mais não consegui entender, preciso exportar o resultado de uma consulta sql para  um arquivo txt.Estou usando o sql server 2005

    pesquisando cheguei nesse comando no sql

    exec bcp '"Select codcli, nomcli from cliente where codcli = 4"  c:\Contacts.txt -c -T'

    so que esta me retornando esse erro

    Msg 2812, Level 16, State 62, Line 1
    Could not find stored procedure 'bcp'.
    quinta-feira, 12 de setembro de 2013 14:53

Todas as Respostas

  • Olá,

    O BCP é um utilitário do SQL Server que é executado no MSDOS.

    Por favor, dê uma olhada nesta documentação: http://technet.microsoft.com/pt-br/library/aa337544.aspx

    "Se a resposta foi útil, não esqueça de marcar a resposta."

    Roberto Galvão
    MCITP - Administration SQL Server 2008
    MCITP - Developer SQL Server 2008
    MCSA - SQL Server 2012
    Blog: http://bobgalvao.wordpress.com


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |


    • Sugerido como Resposta Roberto Galvão quinta-feira, 12 de setembro de 2013 15:02
    • Editado Roberto Galvão quinta-feira, 12 de setembro de 2013 15:07
    quinta-feira, 12 de setembro de 2013 15:02
  • Olá,

    Você pode fazer desta forma:

    "Se a resposta foi útil, não esqueça de marcar a resposta."

    Roberto Galvão
    MCITP - Administration SQL Server 2008
    MCITP - Developer SQL Server 2008
    MCSA - SQL Server 2012
    Blog: http://bobgalvao.wordpress.com


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |

    • Sugerido como Resposta Roberto Galvão quinta-feira, 12 de setembro de 2013 17:19
    quinta-feira, 12 de setembro de 2013 17:19
  • Roberto eu fiz um teste aqui da seguinte forma

    declare @texto nvarchar(4000)
    set @texto = 'select * from clientetemp'

    declare @bcp varchar(8000)
    declare @NomeArquivo varchar(500)
    set @NomeArquivo= 'Testetexto'
    SELECT @bcp = 'bcp "'+@texto+'" QUERYOUT "c:\'+@NomeArquivo+'.txt" -T -c -C"ACP" -t";"'
    EXEC master.dbo.xp_cmdshell @bcp

    e me deu p seguinte erro que consta imagem em anexo

    quinta-feira, 12 de setembro de 2013 17:40
  • Olá,

    Tente fazer assim:

    Ajuste as informações em negrito.

    declare @texto nvarchar(4000)
    set @texto = 'select * from <nome da database>.<owner>.clientetemp'

    declare @bcp varchar(8000)
    declare @NomeArquivo varchar(500)
    set @NomeArquivo= 'Testetexto'
    SELECT @bcp = 'bcp "'+@texto+'" QUERYOUT "c:\'+@NomeArquivo+'.txt" -T -c -C"ACP" -t -S<instancia sql>";"'
    EXEC master.dbo.xp_cmdshell @bcp


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |

    quinta-feira, 12 de setembro de 2013 17:45
  • quinta-feira, 12 de setembro de 2013 18:35
  • Fiz assim

    declare @texto nvarchar(4000)
    set @texto = 'select * from dbo.clientetemp'
    declare @bcp varchar(8000)
    declare @NomeArquivo varchar(500)
    set @NomeArquivo= 'Testetexto'
    SELECT @bcp = 'bcp "'+@texto+'" QUERYOUT "C:\Testetexto.txt" -T -c -C"ACP" -t -S<local>";"'
    EXEC master.dbo.xp_cmdshell @bcp

    Agora esta dando este erro, como se não achasse o arquivo, mais eu criei um com o nome ''Testetexto' e ele continua não achando meu arquivo

    quinta-feira, 12 de setembro de 2013 18:38
  • olá,

    informe o nome da database, coloquei um print para olharmos como esta a sua concatenação.

    declare @texto nvarchar(4000)
    set @texto = 'select * from <database>.dbo.clientetemp'
    declare @bcp varchar(8000)
    declare @NomeArquivo varchar(500)
    set @NomeArquivo= 'Testetexto'
    SELECT @bcp = 'bcp "'+@texto+'" QUERYOUT "C:\Testetexto.txt" -T -c -C"ACP" -t -Slocal";"'
    print 
    @bcp

    EXEC master.dbo.xp_cmdshell @bcp

    execute novamente por favor.

    Seu print deve retornar da seguinte forma: 
    bcp "select * from database_name.dbo.clientetemp" QUERYOUT "C:\Testetexto.txt" -T -c -C"ACP" -t -Slocal

    Se der erro pegue o comando impresso no print e tente executar no MSDOS.

    Aguardo seu retorno.

    Roberto


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |




    quinta-feira, 12 de setembro de 2013 18:53
  • Retornou no print isso bcp "select * from personal_netcardpj.dbo.clientetemp" QUERYOUT "C:\Testetexto.txt" -T -c -C"ACP" -t -Slocal";"

    (8 row(s) affected)

    vou rodar aqui no cmd


    no cmd eu esse erro
    • Editado DouglasAmFm quinta-feira, 12 de setembro de 2013 19:30
    quinta-feira, 12 de setembro de 2013 19:27
  • Douglas,

    Está retornando assim:

    bcp "select * from personal_netcardpj.dbo.clientetemp" QUERYOUT "C:\Testetexto.txt" -T -c -C"ACP" -t -Slocal";"

    Ajuste a sua concatenação para que seu retorno fique assim:

    bcp "select * from personal_netcardpj.dbo.clientetemp" QUERYOUT "C:\Testetexto.txt" -T -c -C"ACP" -t -Slocal

    []s


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |

    • Sugerido como Resposta Roberto Galvão quinta-feira, 12 de setembro de 2013 19:33
    quinta-feira, 12 de setembro de 2013 19:31
  • Roda assim e vê se funciona: 

    bcp "select * from personal_netcardpj.dbo.clientetemp" QUERYOUT "C:\Testetexto.txt" -T -c -C"ACP" -t -Slocal


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |

    • Sugerido como Resposta Roberto Galvão quinta-feira, 12 de setembro de 2013 19:50
    quinta-feira, 12 de setembro de 2013 19:33
  • Eu ja tinha tentado assim, ja deu o erro abaixo. Estou verificando esse erro 53
    quinta-feira, 12 de setembro de 2013 19:59
  • Eu ja tinha tentado assim, ja deu o erro abaixo. Estou verificando esse erro 53

    quinta-feira, 12 de setembro de 2013 20:02
  • quinta-feira, 12 de setembro de 2013 20:03
  • desculpa,

    a instancia mude para localhost

    bcp "select * from personal_netcardpj.dbo.clientetemp" QUERYOUT "C:\Testetexto.txt" -T -c -C"ACP" -t -Slocalhost

    Se for instancia nomeada fica assim: localhost\nome_da_instancia.

    Att,


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |

    quinta-feira, 12 de setembro de 2013 20:03
  • quinta-feira, 12 de setembro de 2013 20:05
  • quinta-feira, 12 de setembro de 2013 20:05
  • opa,

    Fiz um teste aqui:

    A sua query no bcp tem que estar entre aspas duplas (").

    Assim: bcp "select * from personal_netcardpj.dbo.clientetemp" QUERYOUT "C:\Testetexto.txt" -T -c -C"ACP" -t -Slocalhost

    []s


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |



    quinta-feira, 12 de setembro de 2013 20:08
  • declare @texto nvarchar(4000)
    set @texto = 'select * from personal_netcardpj.dbo.clientetemp'
    declare @bcp varchar(8000)
    declare @NomeArquivo varchar(500)
    set @NomeArquivo= 'Testetexto'
    SELECT @bcp = 'bcp "select * from personal_netcardpj.dbo.clientetemp" QUERYOUT "C:\Testetexto.txt" -T -c -C"ACP" -t -Slocalhost'

    print @bcp
    EXEC master.dbo.xp_cmdshell @bcp

    Quando eu gero do cmd ele cria o arquivo mais nao copia os dados, quando é pelo sql nem cria. Pode ser os parametros que estou usando aqui

    quinta-feira, 12 de setembro de 2013 20:31
  • opa,

    Bom agora tem dois erros:

    1 - está dizendo que a tabela não existe neste banco de dados.

    2 - você está com problema de collation.

    Verifique também qual usuário está executando o serviço do sql server. Se tiver como localsystem pode dar problema no acesso ao diretório onde está gravando o arquivo. Tente alterar o usuário de serviço do sql para um user q seja administrador na máquina. 

    Tente exportar somente com uma coluna do tipo inteiro só para ver se esta certinho a execução do comando.

    exemplo: 

    declare @texto nvarchar(4000)
    set @texto = 'select * from personal_netcardpj.dbo.clientetemp'
    declare @bcp varchar(8000)
    declare @NomeArquivo varchar(500)
    set @NomeArquivo= 'Testetexto'
    SELECT @bcp = 'bcp "select codCliente from personal_netcardpj.dbo.clientetemp" QUERYOUT "C:\Testetexto.txt" -T -c -C"ACP" -t -Slocalhost'

    print @bcp
    EXEC master.dbo.xp_cmdshell @bcp

    Altere esta coluna (codCliente) pela nomenclatura utilizada na sua tabela.  


    []s


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |


    quinta-feira, 12 de setembro de 2013 20:39
  • Alem de localhost você colocou \sql2012
    quinta-feira, 12 de setembro de 2013 20:39
  • opa,

    Tire o parametro "-C"ACP"" deixe usar o collation padrão definido no banco de dados.

    []s


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |

    quinta-feira, 12 de setembro de 2013 20:43
  • deixe só como localhost.

    pode tirar o sql2012 que o nome da minha instancia aqui.


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |

    quinta-feira, 12 de setembro de 2013 20:44
  • Fiz aqui e ainda dei um select da minha tabela para ver que ela tem os dados especificos
    quinta-feira, 12 de setembro de 2013 20:49
  • Ai em cima estava com a tabela erra, sobre o 2012 o meu aqui é 2005
    quinta-feira, 12 de setembro de 2013 20:56
  • rodou com sucesso agora?

    tire o parametro de collation ("-C"ACP""). Deixe usar o que está definido no bco de dados.


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |

    quinta-feira, 12 de setembro de 2013 20:56
  • funcionou não, ele da erro de nome e coluna, so que os mesmos estão corretos
    quinta-feira, 12 de setembro de 2013 20:59
  • Tira o parâmetro -C

    quanto a versão do sql não o problema. este utilitário funciona em todas as  versões.


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |


    quinta-feira, 12 de setembro de 2013 21:02
  • eu isso Enter the file storage type of field CODCLI [int]:

    vou testar no cmd

    quinta-feira, 12 de setembro de 2013 21:06
  • Roberto, no CMD não funcionou, agradeço mesmo sua ajuda, mais preciso ir pq tenho aula. Obrigado
    quinta-feira, 12 de setembro de 2013 21:11
  • opa,

    fiz o teste aqui usando o SSMS e via MSDOS. das duas formas funciona normalmente.


    Tente fazer o seguinte: crie um nova DB para teste, crie uma tabela simples e tente executar da forma que fiz acima. Vamos ver se o seu problema não está especificamente nesta DB que estás utilizando.

    olhando este print que você enviou a exportação ocorreu com sucesso. 

    Boa aula!

    []s


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |



    quinta-feira, 12 de setembro de 2013 21:19
  • Roberto bom dia, criei um novo banco eo erro continuou

    sexta-feira, 13 de setembro de 2013 14:47
  • Tentei em outra maquina e deu  o mesmo erro
    sexta-feira, 13 de setembro de 2013 14:59
  • Vamos fazer um teste sem acessar a tabela para ver se funciona.

    Tente executar assim no CMD:

    bcp "select 1" QUERYOUT "C:\Testetexto.txt" -T -c  -t -Slocalhost

    []s

    Roberto


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |

    sexta-feira, 13 de setembro de 2013 14:59
  • No cmd funcionou e copiou, ja no sql deu a mensagem que estava ok, mais nem criou o arquivo.
    sexta-feira, 13 de setembro de 2013 18:59
  • Opa,

    Agora seu problema é o seguinte.

    O usuário que está executando o serviço do SQL não é administrador da maquina e por isso não tem permissão.

    Tente alterar seu usuário que está executando o sql para um usuário que seja administrador da maquina.

    []s


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |

    • Sugerido como Resposta Roberto Galvão sexta-feira, 13 de setembro de 2013 19:52
    sexta-feira, 13 de setembro de 2013 19:20
  • Hum bacana vou testar aqui...
    sexta-feira, 13 de setembro de 2013 20:58