存储过程使用sp_send_dbmail向数据库中查询的多个收件人发送电子邮件



正如标题所说,我正在尝试制作一个存储过程,用于将电子邮件发送到数据库中存储的地址,通常包括多个收件人。我已经尝试了几种方法,但我认为我遇到了困难,如果有人能提供任何意见,我将不胜感激。我遇到的主要问题是在数据库中查询地址,并以有效的方式将其传递给sp_send_dbmail。

地址表很简单,看起来像这样,但要大得多。两列都是varchars:

idNumber   |  email
__________________________
   a123    |  steve@test.com
   a123    |  carol@test.com
   1-100   |  mary@test.com

因此,如果我们发送到身份证号码"a123",则需要给Steve和Carol发一封电子邮件。

这是一个非常简单的程序。这不是逐字逐句的,因为这都在我的工作电脑上,但更多的是我要追求的基本要点。

CREATE PROCEDURE sendMail
  @idNumber varchar(MAX),
  @subject varchar(MAX),
  @body varchar(MAX)
EXEC msdb.dbo.sp_send_dbmail
  @recipients = "EXEC SELECT email FROM emailTable WHERE idNumber = " + @idNumber + "';",
  @subject = @subject,
  @body = @body;

它抛出错误;它似乎不喜欢将ID参数连接到查询中。我尝试制作一个单独的过程来查询电子邮件,但将ID参数传递给该过程似乎也不起作用。即使我成功地传递了参数并成功地执行了查询,我仍然需要将这两个结果连接到一个字符串中,并用分号分隔它们,这样它们就可以很好地使用sp_send_dbmail。我想?

SQL向导,您将如何处理此问题?我没有丰富的经验,所以有没有什么简单的句法错误?我的方法是否存在根本缺陷?

我感谢你的意见。非常感谢。

编辑:这是Kritner的工作解决方案!谢谢大家!

CREATE PROCEDURE testMail2
@idNumber varchar(MAX)
AS
BEGIN
DECLARE @recipientList varchar(MAX)
SET @recipientList = (STUFF((SELECT ';' + email FROM emailTable WHERE idNumber = @idNumber FOR XML PATH(' ')),1,1,''))
EXEC msdb..sp_send_dbmail
@recipients=@recipientList,
@subject='Subject Line',
@body='Body Text'
END

您可以执行查询并将值分配给变量,如下所示:

DECLARE @myRecipientList varchar(max)
SET @myRecipientList = (STUFF((SELECT ';' + emailaddress FROM table FOR XML PATH('')),1,1,''))

这将把您的@myRecipientLIst设置为查询中指定的以";"分隔的收件人列表。

您也可以对SP执行同样的想法,只需将它们放入一个临时/变量表中,并将stuff放入一个分号分隔的列表中。

编辑:

最后发送邮件你可以做:

EXEC msdb.dbo.sp_send_dbmail
  @recipients = @recipientList,
  @subject = @subject,
  @body = @body // ........

注释编辑:

根据您的原始查询,您的物料查询应该如下所示:

DECLARE @myRecipientList varchar(max)
SET @myRecipientList = STUFF((SELECT ';' + email FROM emailTable WHERE idNumber = @idNumber FOR XML PATH('')),1,1,'')

这背后的想法是,对于在电子邮件表中找到的每封电子邮件,都要在@myrecipientList中添加找到的电子邮件和分号。

相关内容

  • 没有找到相关文章

最新更新