Como gerar um arquivo .txt a partir do sql server 2008
23/11/2011
0
Estou com uma grande dificuldade de encontrar algum material que me oriente na geração de um arquivo .txt, de um determinado layout, que possui posições de inicio e fim de cada campo da tabela, exemplo: campo CNPJ inicio coluna 10 fim coluna 24, total de 14 caracteres, usando comando sql, ou seja, querys.
Alguém possui algum material que possa me enviar ?
Caso não, alguém poderia me dar os primeiros passos para eu gerar este arquivo ?
Segue meu email = paulojabqueiroz@yahoo.com.br
Grande abraço a todos,
Paulo Queiroz
Paulo Queiroz
Post mais votado
23/11/2011
Segue um exemplo:
alter procedure sp_escrevenoarquivo (@Caminho SYSNAME, @TXT VARCHAR(8000) )
as
begin
DECLARE @FSO INT, @RES int, @FID int
EXECUTE @RES = sp_OACreate Scripting.FileSystemObject, @FSO OUT
-- Abertura do Arquivo
EXECUTE @RES = sp_OAMethod @FSO, OpenTextFile, @FID OUT, @Caminho, 8, 1
-- Escrita para o arquivo
EXECUTE @RES = sp_OAMethod @FID, WriteLine, Null, @TXT
EXECUTE @RES = sp_OAMethod @FID, close, Null
EXECUTE @RES = sp_OADestroy @FID
EXECUTE @RES = sp_OADestroy @FSO
end
EXEC SP_EscreveNoArquivo C:\Testes.txt , Essa é a primeira linha do arquivo
Existe também a possibilidade de gerar o arquivo via comando BCP ou CMDSHELL
exemplo:
declare @Cmd varchar(255)
set @Cmd = sqlcmd -Urm -Prm -dCorporeRMOficial -q select chapa,nome from pfunc -o c:\funcionario.txt
exec master..xp_cmdshell @Cmd
Marco Pinheiro
Mais Posts
24/11/2011
Paulo Queiroz
Muito obrigado pelo apoio.
Só uma pergunta, com esse código, que ainda não analisei, eu consigo posicionar cada coluna em um determinado tamanho no arquivo .txt, exemplo:
campo CNPJ da tabela fornecedor possui tamanho 14, ou seja, ele deverá entrar no arquivo .txt da coluna 10 até a 24, ou seja, posicionando na coluna como se fosse a geração de um layout, entende ?
aguardo seu retorno.
Grande abraço,
Paulo Queiroz
24/11/2011
Marco Pinheiro
Tem sim. Esse exemplo que te mandei é justamente o que precisei fazer para layout bancário. Montei uma query especificando o tamanho das posições e depois só gerei em arquivo.
Tudo vai depender exclusivamente da sua query.
Att.,
Marco.
24/11/2011
Paulo Queiroz
Mais uma vez, agradeço seu retorno.
o que to tendo dificuldade na geração da query é exatamente isso, ou seja, posicionar cada campo em um tamanho de comprimento do layout, ou seja, o campo razão social, ele deve ir da coluna 20 até a 70, ou seja 50 caracteres.
Acontece que quando o campo possui um nome MENOR QUE 50, o próximo campo do layout junta com essa campo, ou seja, tipo concatena.
Por favor Marco, tem como você me enviar parte de sua query que você tratou o posicionamento das colunas ?
Lhe agradeço,
meu email = paulojabqueiroz@yahoo.com.br
Lhe agradeço,
Paulo Queiroz
24/11/2011
Marco Pinheiro
Use a função do SQL REPLICATE.
Veja o exemplo:
--Campo do layout precisa ter 50 posições, porém fisica no banco ele tem 25.
SELECT CAMPO + REPLICATE( , 50 - LEN(CAMPO)) FROM TABELA
É necessário o uso do LEN pois você não sabe quantos caracteres existem na coluna. Então vc faz essa conta para complementar a string desejada.
Veja se consegue agilizar algo com isso.
Att.,
Marco.
24/11/2011
Paulo Queiroz
mais uma vez lhe agradeço pelo apoio e digo que com o uso do replicate consigo
alinhar as colunas. Agora acontece o seguinte, veja o código como ficou:
SELECT TRC
+ SPACE(5) + SPACE(2) + CLI_PESS + CAST(CLI_CGC AS VARCHAR(14)) COLLATE Latin1_General_CI_AS
+ CAST(CLI_RAZA AS VARCHAR(60)) + REPLICATE( ,60 - LEN(CLI_RAZA))
+ CAST(CLI_APELIDO AS VARCHAR(20)) + REPLICATE( ,19 - (LEN(CLI_APELIDO)))
+ LTRIM(CLI_FEND) + REPLICATE( ,60 - LEN(CLI_FEND))
FROM CPACLIE
Alinhei o layout baseado no reultado do select para o primeiro item, ou seja, fornecedor cod=1.
Apos gerar para todos, os demais resultados, ficaram desalinhados a partir da coluna CLI_FEND,
OU SEJA, ENDERE;CO DO FORNECEDOR.
Mesmo usando LTRIM, não consegui trazer a coluna do CLI_FEND PARA O LOCAL CORRETO, QUE SERIA A
COLUNA 116.
MEU AMIGO, COMO FAÇO PARA RESOLVER ESSA SITUAÇÃO ? PARA QUE TODAS AS COLUJAS FIQUEM ALINHADAS NOS
DEMAIS REGISTROS ?
GRANDE ABRAÇO,
PAULO QUEIROZ
25/11/2011
Marco Pinheiro
Poste um exemplo de como está e como quer que fique, por favor.
Att.,
Marco.
25/11/2011
Paulo Queiroz
Lhe agradeço o empenho no apoio a minha empreitada.
Consegui alinhar os campos usando o comando REPLICATE.
Acontece que eu tava usando um espaço entre aspas simples, , de 1 carácter, dessa forma como tá.
Não sei que tratamento o sql tava fazendo, pois dessa forma ele não alinhava.
Quando usei aspas simples, juntas, ou seja, sem espaços, ele alinhou perfeitamente as colunas.
Exemplo:
ANTES COM DESALINHAMENTO = CAST(CLI_RAZA AS VARCHAR(60)) + REPLICATE( ,60 - LEN(CLI_RAZA))
DEPOIS ALINHADO = CAST(CLI_RAZA AS VARCHAR(60)) + REPLICATE(,60 - LEN(CLI_RAZA))
Agradeço seu apoio,
Se pintar alguma novidade eu alinho contigo.
Um grande abraço,
Paulo Queiroz
25/03/2015
Wygor Raimundo
Se puderem me ajudar na questão abaixo, é sobre o assunto abordado nesta página...
Tenho a select abaixo, e gostaria de exportar os dados da consulta automaticamente em uma determinada hora do dia para um arquivo .txt, e salvar no caminho c:\nomeArquivo.txt. Seguindo o que vocês conversaram, não consegui fazer...
Podem me ajudar?
Select
o.Numero,
o.valor[Valor Unit],
o.quant[Qtd],
o.total[Total],
o.desconto[Desc],
p.codigo[Cod Prod],
s.Descricao,
p.referencia[Ref],
c.Codigo[Cod Cor],
n.codigo[Cod Grade]
from Orcamento o
inner join ItemProduto as ip on o.codprod = ip.barras
inner join Produtos as p on ip.codprod = p.codigo
inner join Secao as s on p.Secao = s.Codigo
inner join Cor as c on ip.codcor = c.Codigo
inner join Numeracao as n on ip.CodGrade = n.codigo
25/03/2015
Marcos P
Dê uma olhada em :
https://social.msdn.microsoft.com/Forums/pt-BR/de2a15ea-42b4-463f-bbbb-3bee2b9187bf/exportar-um-select-para-txt?forum=transactsqlpt
http://forum.imasters.com.br/topic/408771-resolvidoexportar-para-txt-via-query/
Depois de funcionando a geração do TXT, você programa o job via Sql Server Agent...
25/03/2015
Wygor Raimundo
Vou tentar novamente, obrig.
25/03/2015
Marcos P
Qual a versão do Sql Server você está utilizando ?
25/03/2015
Marcos P
https://msdn.microsoft.com/pt-br/library/ms162802.aspx
Testei alguns e eles funcionam... destaco a recomendação contida na página : "O exemplo presume que você esteja usando autenticação do Windows e tenha uma conexão confiável com a instância do servidor na qual está executando o comando bcp."
Boa sorte !
25/03/2015
Wygor Raimundo
exec xp_cmdshell 'BCP "select * from Orcamento " queryout c:\teste.TXT -c -t[;] -r{#}\n -CP850 -T -Slocalhost'
Consegue identificar algo de errado no comando acima?
A resposta que tenho do SQL quando executo diretamente no SQL, aparece uma coluna chamada output com as informações:
- SQLState = S0002, NativeError = 208
- Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Invalid object name 'Orcamento'.
- SQLState = 37000, NativeError = 8180
- Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Statement(s) could not be prepared.
25/03/2015
Wygor Raimundo
exec xp_cmdshell 'BCP "select * from Orcamento " queryout c:\teste.TXT -c -t[;] -r{#}\n -CP850 -T -Slocalhost'
Consegue identificar algo de errado no comando acima?
A resposta que tenho do SQL quando executo diretamente no SQL, aparece uma coluna chamada output com as informações:
- SQLState = S0002, NativeError = 208
- Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Invalid object name 'Orcamento'.
- SQLState = 37000, NativeError = 8180
- Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Statement(s) could not be prepared.
25/03/2015
Wygor Raimundo
exec xp_cmdshell 'BCP "select * from Orcamento " queryout c:\teste.TXT -c -t[;] -r{#}\n -CP850 -T -Slocalhost'
Consegue identificar algo de errado no comando acima?
A resposta que tenho do SQL quando executo diretamente no SQL, aparece uma coluna chamada output com as informações:
- SQLState = S0002, NativeError = 208
- Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Invalid object name 'Orcamento'.
- SQLState = 37000, NativeError = 8180
- Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Statement(s) could not be prepared.
Clique aqui para fazer login e interagir na Comunidade :)