小编aei*_*iou的帖子

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

正如标题所说,我正在尝试制作一个存储过程,用于将电子邮件发送到存储在数据库中的地址,通常包括多个收件人。我已经尝试了一些方法来解决这个问题,但我想我碰壁了,希望得到任何人的意见。我遇到的主要问题是查询数据库中的地址并以有效的方式将其传递给 sp_send_dbmail。

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

idNumber   |  email
__________________________
   a123    |  steve@test.com
   a123    |  carol@test.com
   1-100   |  mary@test.com
Run Code Online (Sandbox Code Playgroud)

因此,如果我们要向 ID 号“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;
Run Code Online (Sandbox Code Playgroud)

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

SQL 向导,您将如何处理此问题?我的经验并不丰富,所以我做错了一些简单的语法吗?我的方法从根本上有缺陷吗?

我感谢您的意见。谢谢你。

编辑:这是 Kritner 的工作解决方案!谢谢一堆!

CREATE PROCEDURE testMail2
@idNumber varchar(MAX)
AS
BEGIN
DECLARE @recipientList …
Run Code Online (Sandbox Code Playgroud)

sql database sql-server stored-procedures sp-send-dbmail

2
推荐指数
1
解决办法
1万
查看次数