none
Salvar o resultade de uma procedure de SQL em um txt RRS feed

  • Pergunta

  • Bom dia ....

    Gostaria de saber se alguem sabe me explicar como salvar o resuldado de uma procedure de SQL em um arquivo txt...

    Estou usando o SQL Server no Windows 2000....

    Ja tentei usar o ComandoBCP mas num deu mto certo....

    Obrigada

    sexta-feira, 12 de janeiro de 2007 11:52

Respostas

  • entao quando vc. estiver criando um job no step do job coloque este comando

    Bcp "select distinct(Nro_Apolice)    from  processamento where Nro_Apolice <> 0
    AND ResultProcessamento = 'Endosso Anterior não encontrado.' AND Data = convert(varchar(30),getdate(),103)
    order by Nro_Apolice" queryout "C:\Arquivo.Txt" -Snome_Servidor -c -t; -T

     

    e o type do job selecione um que tem commnad (exec)

     

    Abs;

    sexta-feira, 12 de janeiro de 2007 12:29
  • bom troque o tipo do step para Transact Sql e tente com esse codigo no step


    Declare @VarComand Varchar(1000)
    Declare @NomeArquivo Varchar(50)


    Select @NomeArquivo = 'ARQ' + replace(convert(varchar(10),getdate(),126),'-','') + '.txt'

    Select @VarComand = '
    Bcp "select distinct(Nro_Apolice) from GestaoSeg_ETL.dbo.processamento  where Nro_Apolice <> 0 AND ResultProcessamento = ''Endosso Anterior não encontrado.'' AND Data = convert(char(10),getdate(),126) order by Nro_Apolice" queryout " ' + @NomeArquivo + ' -SHDIDW3 -c -t; -T'

    exec master..xp_cmdshell @VarComand

     

    Abs

    segunda-feira, 22 de janeiro de 2007 14:58
  • nem precisa chamar o job neste caso, vc. pode usar o objeto connection.exec " procedure " a procedure vc. coloca o codigo que eu passei cum a xp_cmdhsell mais para chmar um job do vb vc. pode ou usar dmo ou usar a :

    sp_start_job [@job_name =] 'job_name' |

     

    Abs;

    qualquer coisa retorne.

    segunda-feira, 22 de janeiro de 2007 16:40

Todas as Respostas

  • BCP nao vai volar mesmo.

    o que vc. pode fazer retornar o resultado desta proc dento de uma tabela e depois usar o bcp para pegar os dados, ou executar pelo osql passando o parametro para salvar resultado em arquivo.

     

    Abs;

    sexta-feira, 12 de janeiro de 2007 12:08
  • Mas como eu poderia fazer isso ?????

    Segue o comando que eu quero fazer:


    select distinct(Nro_Apolice)    from  processamento where Nro_Apolice <> 0 
    AND ResultProcessamento = 'Endosso Anterior não encontrado.' AND Data = convert(varchar(30),getdate(),103)
    order by Nro_Apolice

    Se vc puder ajudar ...

    sexta-feira, 12 de janeiro de 2007 12:11
  • neste caso nao precisa usar procedure vc. pode usar o queryout

    veja exemplos em:

     

    http://www.forumweb.com.br/artigos/artigos.php?action=file&id=251

     

    Abs;

    sexta-feira, 12 de janeiro de 2007 12:18
  • O problema é que isso vai virar um job depois ... Entaum eu tenho que fazer via procedure....

     

    sexta-feira, 12 de janeiro de 2007 12:20
  • porque vc. nao coloca o codigo do bcp no step do job ?, vc. pode usar um tipo command (exe )

    se precisar de ajuda retorne.

     

     

    sexta-feira, 12 de janeiro de 2007 12:23
  • Ah eu preciso de ajuda sim se vc puder me ajudar ...

    Eu naum conheço mto de SQL....

    sexta-feira, 12 de janeiro de 2007 12:26
  • entao quando vc. estiver criando um job no step do job coloque este comando

    Bcp "select distinct(Nro_Apolice)    from  processamento where Nro_Apolice <> 0
    AND ResultProcessamento = 'Endosso Anterior não encontrado.' AND Data = convert(varchar(30),getdate(),103)
    order by Nro_Apolice" queryout "C:\Arquivo.Txt" -Snome_Servidor -c -t; -T

     

    e o type do job selecione um que tem commnad (exec)

     

    Abs;

    sexta-feira, 12 de janeiro de 2007 12:29
  • Bom vou tentar agora e ver se da certo....

    Obrigada

    sexta-feira, 12 de janeiro de 2007 12:41
  • Ahh so uma coisa...

    Mata uma curiosidade .... Pq é necessário colocar o nome do servidor????

     

    sexta-feira, 12 de janeiro de 2007 12:43
  • porque o bcp e um utilitario de comando entao ele e quem vai se conetar com seu servidor sql.

     

    Abs;

    sexta-feira, 12 de janeiro de 2007 12:53
  • A ta .... entendi agora...

    Brigada ...

    sexta-feira, 12 de janeiro de 2007 13:00
  • Outra pergunta ... Por exemplo o nome do arquivo que sera gerado sempre sera fixo???

    Naum tem como eu colocar uma variavel que indica  a data mais um nome padrão, por exemplo:

    01/01/2007-nome_arquivo;

    ou o nome do arquivo ser uma variavel numerica que é incrementada????Por exemplo

    01/01/2007-001

    01/01/2007-002

    sexta-feira, 12 de janeiro de 2007 13:45
  • tem como fazer sim sem problemas, veja se funciona bem do geito que vc. quer o bcp entao a gente faz o arquivo com nomes dinamicos.

     

    Abs;

    sexta-feira, 12 de janeiro de 2007 14:06
  • Se vc puder me ajudar eu agradeço
    sexta-feira, 12 de janeiro de 2007 18:26
  • funcionou sem ser dinamico ?

     

    Abs/;

    segunda-feira, 15 de janeiro de 2007 09:00
  • Ele começa a dar "Executing Job" so que ele não termina nunca....

    Acho que num ta dando certo

    segunda-feira, 15 de janeiro de 2007 12:44
  • chegou a gerar o arquivo ? veja no c: do seu servidor onde esta instaldo o sql server.

    o que nao termina acho que e so refresh.

    Abs;

    segunda-feira, 15 de janeiro de 2007 13:09
  • Entaum ele nem chega a criar o arquivo
    segunda-feira, 15 de janeiro de 2007 13:16
  •  

     qual comando vc. esta colocando no step ? vc. pode postar por favor.

    Abs;

    segunda-feira, 15 de janeiro de 2007 13:33
  • eu tentei com um comando simples e funcionou normalmente...

    O erro ta no select, estranho é que antes estava funcionando e agora ele ta chiando desse trecho: AND Data = convert(varchar(30),getdate(),103).

    Data é campo do tipo DATETIME.

    segunda-feira, 15 de janeiro de 2007 13:45
  • troque por

     AND Data = convert(char(10),getdate(),126)

    abs;

    segunda-feira, 15 de janeiro de 2007 13:51
  • é estranho pq eu jogo no sql e funciona... sera o problema devido ao fato de eu naum usar a database master???????????????????????????
    segunda-feira, 15 de janeiro de 2007 15:17
  • vc. esta passando nome_banco.onwer.tabela na consulta ?
    terça-feira, 16 de janeiro de 2007 09:00
  • Da uma olhada no comando


    Bcp "select distinct(Nro_Apolice)    from  processamento where Nro_Apolice <> 0 
    AND ResultProcessamento = 'Endosso Anterior não encontrado.' AND Data = convert(char(10),getdate(),126)
    order by Nro_Apolice" queryout "C:\Arquivo.Txt" -SHDIDW3 -c -t; -T

    quarta-feira, 17 de janeiro de 2007 11:19
  • coloque o nome do banco e o owner segue:

     

     Bcp "select distinct(Nro_Apolice)    from  nome_do_banco.owner_da_tabela.processamento where Nro_Apolice <> 0 
    AND ResultProcessamento = 'Endosso Anterior não encontrado.' AND Data = convert(char(10),getdate(),126)
    order by Nro_Apolice" queryout "C:\Arquivo.Txt" -SHDIDW3 -c -t; -T

     

     

    quarta-feira, 17 de janeiro de 2007 11:25
  • Então fica assim???

    Mas no owner é assim mesmo????

    Pque a tabela ja chama processamento


    Bcp "select distinct(Nro_Apolice)    from  GestaoSeg_ETL.owner_da_tabela.processamento where Nro_Apolice <> 0
    AND ResultProcessamento = 'Endosso Anterior não encontrado.' AND Data = convert(char(10),getdate(),126)
    order by Nro_Apolice" queryout "C:\Arquivo.Txt" -SHDIDW3 -c -t; -T

    quarta-feira, 17 de janeiro de 2007 11:55
  • seu owner por default e o usuario que criou a tabela, geralmente e dbo ficaria assim

    GestaoSeg_ETL.dbo.processamento

    ou

    GestaoSeg_ETL..processamento

     

    Abs;

     

     

    quarta-feira, 17 de janeiro de 2007 12:31
  • Da uma olhada no erro

     

    The job failed.  Unable to determine if the owner (HDI\corvu) of job Localiza has server access (reason: Could not obtain information about Windows NT group/user 'HDI\corvu'. [SQLSTATE 42000] (Error 8198)).

    quarta-feira, 17 de janeiro de 2007 12:48
  • troca o -T por -Unome_usuario -Psenha

     

    por exemplo usuario sa senha teste

    -Usa -Pteste

     

    Abs;

    quarta-feira, 17 de janeiro de 2007 12:56
  • O erro continua o mesmo...

     

    The job failed.  Unable to determine if the owner (HDI\corvu) of job Localiza has server access (reason: Could not obtain information about Windows NT group/user 'HDI\corvu'. [SQLSTATE 42000] (Error 8198)).

    quarta-feira, 17 de janeiro de 2007 13:09
  • seu sql esta como windows ou mixed mode autentication ?

    se quizer me passar um email eu retorno com meu telefone assim posso podemos ver por telefone o erro.

     

    mcolla@bol.com.br

    Abs;

    quarta-feira, 17 de janeiro de 2007 13:27
  • Mixed Mode
    quarta-feira, 17 de janeiro de 2007 14:05
  • tente rodar esse comando no query analiser usando a xp_cmdshell . acho que seu problema e so direitos agora.

     

    abs;

    quarta-feira, 17 de janeiro de 2007 14:08
  • eu tentei rodar todo o codigo e nada dai tentei rodar o arquivo que tem o script e tbem nada
    quarta-feira, 17 de janeiro de 2007 16:03
  •  

     puxa eu executei o codigo que eu te passei e aqui rodou sem problemas, o ultimo erro estaca relacionado a permissao. tente fazer com um select mais simples primeiro.

    Abs;

    quarta-feira, 17 de janeiro de 2007 16:12
  • bom ta td mto estranho pq antes eu tinha feito um job simples de um select e tava dando certo agora nada ta dando certo
    quarta-feira, 17 de janeiro de 2007 16:39
  • nossa agora realmente num sei qual o problema

    nenhum ta funcionando...

    quarta-feira, 17 de janeiro de 2007 16:58
  •  

     porque vc. nao comeca de novo, desde do inicio com um select simples.

     

    Abs;

    quarta-feira, 17 de janeiro de 2007 18:30
  • Sim eu vou tentar fazer isso
    quinta-feira, 18 de janeiro de 2007 16:16
  • fazendo um select normal ele ta funcionando
    segunda-feira, 22 de janeiro de 2007 13:30
  • entao apartir deste select normal va implementando passo a passo seu where. qualquer coisa retorne.

     

    A bs;

    segunda-feira, 22 de janeiro de 2007 13:36
  • ahhhh o outro agora funcionou ....

    esta funcionando normal...

    sera que vc pode me ajudar com os nomes agora????

    segunda-feira, 22 de janeiro de 2007 13:39
  • sem problemas, pode me passar seu comando completo ( o que esta ok ), e qual a logica para os nomes por exemplo o nome do arquivo sera ARQ + a data do dia que gerou.

     

    Abs.

    segunda-feira, 22 de janeiro de 2007 13:49
  • Anota ai o comando:

    Bcp "select distinct(Nro_Apolice)    from  GestaoSeg_ETL.dbo.processamento  where Nro_Apolice <> 0 AND ResultProcessamento = 'Endosso Anterior não encontrado.' AND Data = convert(char(10),getdate(),126) order by Nro_Apolice" queryout "C:\Arquivo.Txt" -SHDIDW3 -c -t; -T

    a eu queria algo assim 001+data que foi gerado....

    e se fosse gerado um outro virasse 002+ data...

    se for possivel....

    Brigadu... vc me ajudou mto

    segunda-feira, 22 de janeiro de 2007 13:54
  • bom troque o tipo do step para Transact Sql e tente com esse codigo no step


    Declare @VarComand Varchar(1000)
    Declare @NomeArquivo Varchar(50)


    Select @NomeArquivo = 'ARQ' + replace(convert(varchar(10),getdate(),126),'-','') + '.txt'

    Select @VarComand = '
    Bcp "select distinct(Nro_Apolice) from GestaoSeg_ETL.dbo.processamento  where Nro_Apolice <> 0 AND ResultProcessamento = ''Endosso Anterior não encontrado.'' AND Data = convert(char(10),getdate(),126) order by Nro_Apolice" queryout " ' + @NomeArquivo + ' -SHDIDW3 -c -t; -T'

    exec master..xp_cmdshell @VarComand

     

    Abs

    segunda-feira, 22 de janeiro de 2007 14:58
  • mas num ta salvando em diretorio nenhum
    segunda-feira, 22 de janeiro de 2007 15:35
  • faltou colocar o caminho, troque esta parte

    Select @NomeArquivo = 'ARQ' + replace(convert(varchar(10),getdate(),126),'-','') + '.txt'

    por

    Select @NomeArquivo = 'C:\ARQ' + replace(convert(varchar(10),getdate(),126),'-','') + '.txt'

    Abs;

    segunda-feira, 22 de janeiro de 2007 15:38
  • um ainda naum esta salvando em lugar nenhum

    mas da sucesso

    segunda-feira, 22 de janeiro de 2007 15:48
  • ja descobri o erro tinha uma " a mais agora esta funcionando

     

    Mto obrigada

    segunda-feira, 22 de janeiro de 2007 15:54
  • deixa eu perguntar pra vc ja que vc entende tem como iniciar um job no sql chamando via VB?????

     

    segunda-feira, 22 de janeiro de 2007 16:33
  • nem precisa chamar o job neste caso, vc. pode usar o objeto connection.exec " procedure " a procedure vc. coloca o codigo que eu passei cum a xp_cmdhsell mais para chmar um job do vb vc. pode ou usar dmo ou usar a :

    sp_start_job [@job_name =] 'job_name' |

     

    Abs;

    qualquer coisa retorne.

    segunda-feira, 22 de janeiro de 2007 16:40
  • eu criei uma conexão via dataenvironment... depois inseri um comando...

    so preciso sabe chamar este comando

    eu tentei fazer assim

     

    Private Sub BtnRodar_Click()
    DataEnvironment1.Command1
    End Sub

    segunda-feira, 22 de janeiro de 2007 16:56
  • ja esta funcionando...

    Mto obrigada .......

    segunda-feira, 22 de janeiro de 2007 18:29
  • segunda-feira, 22 de janeiro de 2007 18:30