【问题标题】:Why do I get error -2147467259 when trying to send an email in SQL Server [duplicate]尝试在 SQL Server 中发送电子邮件时,为什么会收到错误 -2147467259 [重复]
【发布时间】:2021-08-30 11:22:29
【问题描述】:

我正在尝试发送一封电子邮件,其中包含 SQL Server 中存储过程调用的结果。

declare @querytext nvarchar(100)
set @querytext = 'sp_get_SPresults @item_name = ''Name of Group'''';
EXEC msdb.dbo.sp_send_dbmail  
    @profile_name = 'My Email',  
    @recipients = 'anaddress@adomain.com',  
    @body = 'Email',  
    @subject = 'Suitable Subject' ,     
    @query = @querytext,
    @attach_query_result_as_file = 1,
@query_result_header = 1,
@query_no_truncate = 1;

但是当我运行它时,我得到了一个

消息 22050,第 16 层,状态 1,第 23 行 初始化 sqlcmd 库失败,错误号 -2147467259 错误。

当我在 SQL Server 中发送测试电子邮件时,它可以正常发送。即使只是将@querytext 设置为"select * from [Table]" 也不起作用。我在其他地方看到包括@query_result_header=1 可以解决此类问题,但在这里似乎没有什么不同。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 我怀疑这里有 2 个问题。首先,根据您所说的尝试,我的阅读表明应将@query_result_header 设置为0 而不是1。我怀疑这样做的原因是当您尝试发送的数据集太大时,因此您需要截断结果;让标题仍然溢出它,因为它确保数据集适合,而不是标题+数据集。但是,理想情况下,如果您想通过电子邮件发送如此大的数据集,请将逻辑转移到其他地方。
  • 尝试通过限定数据库和模式名称来调用存储过程,例如'exec MyDatabase.dbo.sp_get_SPresults @item_name=''Name of Group'''';
  • 另外... 在命名程序时避免使用 sp 前缀。 SQL Server 使用此前缀来指定系统过程。如果存在同名的系统过程,使用前缀可能会导致应用程序代码中断。_ REF:CREATE PROCEDURE
  • 然而,我怀疑真正的原因是您缺少参数execute_query_database(请参阅Arguments),因此您尝试运行S特殊 Pmsdb的上下文中处理sp_get_SPresults;程序sp_send_dbmail存在的数据库。虽然我不认识sp_get_SPresults;这不是记录在案的S特殊P程序。
  • 您是否正确设置了 DB Mail,配置文件 My Email 是否已完全设置?

标签: sql-server sp-send-dbmail


【解决方案1】:

最后,无论出于何种原因,我尝试只使用以下参数:

  • @profile_name
  • @recipients
  • @body
  • @主题
  • @body_format
  • @execute_query_database

现在可以了。感谢大家的帮助。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-17
    • 2015-06-14
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 2012-08-23
    相关资源
    最近更新 更多