Inquiridor
Exportar uma consulta ou conteudo de uma tabela para uma arquivo txt

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'.
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
-
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.comRoberto Galvão | MCTS | MCITP | Microsoft Partner |
- Sugerido como Resposta Roberto Galvão 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 @bcpe me deu p seguinte erro que consta imagem em anexo
-
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 @bcpRoberto Galvão | MCTS | MCITP | Microsoft Partner |
-
-
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 @bcpAgora 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
-
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 @bcpEXEC 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 -SlocalSe der erro pegue o comando impresso no print e tente executar no MSDOS.
Aguardo seu retorno.
Roberto
Roberto Galvão | MCTS | MCITP | Microsoft Partner |
- Editado Roberto Galvão quinta-feira, 12 de setembro de 2013 19:04
-
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
- Editado DouglasAmFm quinta-feira, 12 de setembro de 2013 19:30
-
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
-
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
-
-
-
-
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 |
-
-
-
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 |
- Editado Roberto Galvão quinta-feira, 12 de setembro de 2013 20:09
-
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 @bcpQuando 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
-
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 @bcpAltere esta coluna (codCliente) pela nomenclatura utilizada na sua tabela.
[]s
Roberto Galvão | MCTS | MCITP | Microsoft Partner |
- Editado Roberto Galvão quinta-feira, 12 de setembro de 2013 20:40
-
-
-
-
-
-
-
-
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 |
- Editado Roberto Galvão quinta-feira, 12 de setembro de 2013 21:04
-
-
-
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 |
- Editado Roberto Galvão quinta-feira, 12 de setembro de 2013 21:27
-
-
-
-
-
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
-