正如标题所说,我正在尝试制作一个存储过程,用于将电子邮件发送到存储在数据库中的地址,通常包括多个收件人。我已经尝试了一些方法来解决这个问题,但我想我碰壁了,我会很感激任何人的任何意见。我遇到的主要问题是在数据库中查询地址并以一种有效的方式将其传递给 sp_send_dbmail。
地址表非常简单,看起来像这样,但要大得多。两列都是 varchars:
idNumber | email
__________________________
a123 | steve@test.com
a123 | carol@test.com
1-100 | mary@test.com
因此,如果我们向 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;
它抛出错误;它似乎不喜欢将 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