2

タイトルが示すように、データベースに保存されているアドレス (多くの場合、複数の受信者を含む) に電子メールを送信するために使用されるストアド プロシージャを作成しようとしています。私はこれに対していくつかのアプローチを試みましたが、私は壁にぶつかっていると思います。私が抱えていた主な問題は、データベースにアドレスを照会し、それを機能する方法で sp_send_dbmail に渡すことです。

アドレス テーブルは非常に単純で、次のように見えますが、はるかに大きくなっています。両方の列は varchar です。

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 パラメーターを手順に渡すこともできなかったようです。パラメータを渡してクエリを正常に実行したとしても、2 つの結果を 1 つの文字列に結合し、セミコロンで区切る必要があります。おもう?

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
4

1 に答える 1