AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 227060
Accepted
youcantryreachingme
youcantryreachingme
Asked: 2019-01-14 21:57:52 +0800 CST2019-01-14 21:57:52 +0800 CST 2019-01-14 21:57:52 +0800 CST

Quais são os valores de retorno sp_send_dbmail?

  • 772

Eu tenho um e-mail falhando com o valor de retorno da função de '101' e @@error valor de '0' (nenhuma linha é adicionada a sysmail_allitems).

Onde posso encontrar documentação sobre códigos de retorno para esta função?

Código de exemplo mostrando como obtenho os valores acima:

exec @result = msdb.dbo.sp_send_dbmail
    @profile_name = 'OBFUSCATED',  
    @recipients = @DL,  
    @subject = 'OBFUSCATED',
    @body = @emailBody,
    @body_format='html',
    @query = @reportQuery,
    @exclude_query_output = 1,
    @attach_query_result_as_file = 1,
    @query_attachment_filename = @filename,
    @query_result_separator = @temp,
    @query_result_header = 1,
    @mailitem_id = @mailitem_id
    ;

    set @temp = @@ERROR;
sql-server database-mail
  • 2 2 respostas
  • 5240 Views

2 respostas

  • Voted
  1. Best Answer
    Josh Darnell
    2019-01-16T18:27:14+08:002019-01-16T18:27:14+08:00

    O código de erro 101 ocorre porque o anexo do resultado da consulta é maior que a opção de configuração do Database Mail "MaxFileSize".

    Investigação

    Minha primeira tentativa de descobrir isso foi executar sp_helpttexto sp_send_dbmailprocedimento para analisar a implementação:

    EXEC sp_helptext 'sp_send_dbmail';
    

    O corpo principal desse procedimento retorna vários códigos de status diferentes, de 0 a 21. Ele não menciona 101. No entanto, ele chama alguns outros procedimentos armazenados, como sysmail_verify_profile_sp, então dei uma olhada nele:

    EXEC sp_helptext 'sysmail_verify_profile_sp';
    

    Mas isso só retorna códigos de 0 a 4.

    Mais tarde o proc chama em sysmail_verify_addressparams_sp, vamos dar uma olhada:

    EXEC sp_helptext 'sysmail_verify_addressparams_sp';
    

    Shucks, que retorna apenas 0 ou 1.

    A seguir é sp_RunMailQuery:

    EXEC sp_helptext 'sp_RunMailQuery';
    

    Ele chama sysmail_help_configure_value_spe sp_isprohibited, ambos retornando apenas 0 ou 1.

    Caixa preta

    No final de sp_RunMailQuery, um procedimento armazenado estendido do sistema é chamado: xp_sysmail_format_query.

    Não podemos pegar o código-fonte para isso, mas tive um palpite no início do proc:

    --Get the maximum file size allowed for attachments from sysmailconfig.  
    EXEC msdb.dbo.sysmail_help_configure_value_sp @parameter_name = N'MaxFileSize',   
                                                @parameter_value = @fileSizeStr OUTPUT
    

    Percebi que você está usando o parâmetro attachment e os resultados da consulta + tamanho máximo do arquivo também são passados ​​para o procedimento armazenado estendido.

    Cidade de reprodução

    Configurei o tamanho máximo do arquivo do Database Mail para 10 bytes e executei:

    DECLARE @result AS INT;
    
    exec @result = msdb.dbo.sp_send_dbmail
        @profile_name = 'DBMail',  
        @recipients = '[email protected]',  
        @subject = 'This is the subject',
        @body = 'This is the body',
        @body_format='html',
        @query = 'SELECT * FROM sys.messages;',
        @exclude_query_output = 1,
        @attach_query_result_as_file = 1,
        @query_attachment_filename = 'big-file.csv',
        @query_result_separator = '===',
        @query_result_header = 1;
    
    SELECT @result;
    

    Nota: a tabela "sys.messages" tem um monte de dados de string que eu sabia que seriam mais de 10 bytes.

    E com certeza, eu tenho 101 como o código de retorno:

    Erro 101

    Bugz

    Como CR241 apontou , a documentação diz que @@ERROR deve conter o número de identificação do erro que corresponde à mensagem de erro apropriada na sys.messagestabela:

    O código de erro para a instrução que falhou é armazenado na variável @@ERROR. - sp_send_dbmail - Valores de código de retorno

    Em vez disso, é 0 no meu teste (que você observou na sua pergunta original). Isso me parece um bug.

    • 11
  2. CR241
    2019-01-16T13:45:17+08:002019-01-16T13:45:17+08:00

    De acordo com sp_send_dbmail

    Valores do código de retorno:

    Um código de retorno de 0 significa sucesso. Qualquer outro valor significa falha.

    O código de erro para a instrução que falhou é armazenado na @@ERRORvariável.

    sp_send_dbmail()retorna 0se o processo de envio de e-mails pode ser iniciado sem erro. Isso significa que os e-mails foram definidos na fila de e-mails do banco de dados e, para cada e-mail, o mailitem_idvalor da mensagem é retornado no conjunto de resultados.

    Qualquer valor de retorno diferente de 0significa erro. O código de erro preciso da instrução com falha pode ser visto em @@ERROR.

    Depois de usar sp_send_dbmail(), o email é enviado de forma assíncrona e ainda pode falhar por vários motivos. Portanto, se sp_send_dbmail()retornar 0, não significa sucesso final.

    Você pode olhar msdb.dbo.sysmail_faileditemscomo no caso de erro.

    • 2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve