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