locked
Envio de E-mail RRS feed

  • Pergunta

  • Pessoal estou usando o recurso database mail para envio de um retorno por e-mail para alguns usuários, query consiste em listar o resultado de uma temporária como segue abaixo:

    EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'Gerenciamento de Banco',
        @recipients = 'teste@gmail.com',
        @query = 'SET NOCOUNT ON; select LTRIM(RTRIM(NOME)) AS NOME, LTRIM(RTRIM(CPFCGC)) AS CPFCGC from [wsi-prot].dbo.pessoaslog' ,
        @subject = 'Work Order Count',
        @attach_query_result_as_file = 1 ,
        @query_attachment_filename = 'c:\spool\pessoaslog.csv',
        @query_result_header = 0,
        @query_result_width = 32767 ,
        @query_result_separator = ';', /*@query_result_separator = ';',*/
        @query_result_no_padding = 1

     Bom até aqui ele envia o arquivo normalmente porem quando eu abro no excel o arquivo não é separado corretamente o que impede o pessoal de conferir o mesmo alguém saberia me dizer pq não abre correto? outro problema é que hj a tabela esta com aproximadamente 2536 registros e preciso enviar todos pois a cada execução ela é apagada e verifiquei que ela esta incompleta o número de linhas alguém poderia me ajudar?


    • Editado eder.luca sexta-feira, 5 de setembro de 2014 18:03
    sexta-feira, 5 de setembro de 2014 18:02

Respostas

  • Boa Tarde Eder,

    Para separar corretamente o arquivo .csv, tenta trocar o trecho

     @query_result_separator = ';', /*@query_result_separator = ';',*/

    por

    @query_result_separator=@tab,
    Vou anexar a query que eu utilizo em uma das minhas rotinas por que pode te ajudar com relação a limitação de registros.

    -- Start T-SQL
        USE msdb
        
        DECLARE
        @tab char(1) = CHAR(9)
        
        EXEC sp_send_dbmail
          @profile_name = 'profile_name',
          @recipients = 'email@email.com.br',
          @subject = 'Lista',
          @body = 'Segue em anexo a listagem diária.',
          @execute_query_database = 'msdb',
          @attach_query_result_as_file = 1,
          @query_attachment_filename='job_error.csv',
          @query_result_separator=@tab,
          @query_result_no_padding=1,
          @query = '  SELECT * FROM TABELA'
    -- End T-SQL --


    Att, Bruno Silva.

    sexta-feira, 5 de setembro de 2014 18:46

Todas as Respostas

  • Eder,

    Jáverificou se esse arquivo excel antes de ser enviado esta correto ?

    Pode ser que ele esteja com erros antes de ser enviado.


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    sexta-feira, 5 de setembro de 2014 18:14
  • Como eu faço essa verificação, pois o arquivo não fica no diretório que eu informei eu só recebo o mesmo.
    sexta-feira, 5 de setembro de 2014 18:33
  • Eder,

    O arquivo esta no diretorio c:\spool\ 

    No servidor em que esta instalado o SQL Server


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    sexta-feira, 5 de setembro de 2014 18:38
  • Boa Tarde Eder,

    Para separar corretamente o arquivo .csv, tenta trocar o trecho

     @query_result_separator = ';', /*@query_result_separator = ';',*/

    por

    @query_result_separator=@tab,
    Vou anexar a query que eu utilizo em uma das minhas rotinas por que pode te ajudar com relação a limitação de registros.

    -- Start T-SQL
        USE msdb
        
        DECLARE
        @tab char(1) = CHAR(9)
        
        EXEC sp_send_dbmail
          @profile_name = 'profile_name',
          @recipients = 'email@email.com.br',
          @subject = 'Lista',
          @body = 'Segue em anexo a listagem diária.',
          @execute_query_database = 'msdb',
          @attach_query_result_as_file = 1,
          @query_attachment_filename='job_error.csv',
          @query_result_separator=@tab,
          @query_result_no_padding=1,
          @query = '  SELECT * FROM TABELA'
    -- End T-SQL --


    Att, Bruno Silva.

    sexta-feira, 5 de setembro de 2014 18:46
  • Boa Tarde Eder,

    Para separar corretamente o arquivo .csv, tenta trocar o trecho

     @query_result_separator = ';', /*@query_result_separator = ';',*/

    por

    @query_result_separator=@tab,
    Vou anexar a query que eu utilizo em uma das minhas rotinas por que pode te ajudar com relação a limitação de registros.

    -- Start T-SQL
        USE msdb
        
        DECLARE
        @tab char(1) = CHAR(9)
        
        EXEC sp_send_dbmail
          @profile_name = 'profile_name',
          @recipients = 'email@email.com.br',
          @subject = 'Lista',
          @body = 'Segue em anexo a listagem diária.',
          @execute_query_database = 'msdb',
          @attach_query_result_as_file = 1,
          @query_attachment_filename='job_error.csv',
          @query_result_separator=@tab,
          @query_result_no_padding=1,
          @query = '  SELECT * FROM TABELA'
    -- End T-SQL --


    Att, Bruno Silva.

    Brunão,

    Acredito que você matou a pau esta dúvida, se especificarmos no parâmetro @query_result_separator a variável @tab definida através da função Char(9), o SQL Server vai entender que a formação do arquvio dever ser em tabela e assim, ficará mais fácil e legível para o Excel abrir e posicionar os dados dentro da WorkSheet.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com


    sexta-feira, 12 de setembro de 2014 18:35