0

こんにちは Stackoverflow コミュニティ!

フォームで回答を見つけるのが難しいクエリがあります。

私は単純なストアドプロシージャを持っています:

CREATE PROCEDURE [dbo].[spSendEmail] 
@To NVARCHAR(100),   
@Subject NVARCHAR(200),
@Body NVARCHAR(MAX),
@FileAttachments NVARCHAR(MAX) = null

AS
BEGIN

EXEC  [msdb].[dbo].sp_send_dbmail
@profile_name= 'Test Mail',
@recipients=@To,    
@subject=@Subject,
@body=@Body,
@body_format = 'HTML',
@file_attachments= @FileAttachments

END

必要なパラメーター、つまり @To を渡す各行のクエリからの結果セットに対してこれを呼び出したい

4 つの列を返す、結果セット クエリの簡略化されたバージョン:

    SET ROWCOUNT 0
SELECT s.EMAIL_ADDRESS, s.Date,s.Code,s.Description
INTO #tempMyDetails
    FROM ContactInfo s

このテーブルから、次のことを行っています。

    DECLARE @Subject NVARCHAR(200)
SET @Subject = 'My Email'

DECLARE @sql As NVarchar(MAX);  
SET     @sql = N'';
SELECT  @sql = @sql + ' EXEC spSendEmail ''' 
    + t.EMAIL_ADDRESS + '''' + ',' + '''' + @Subject + ': ' + t.Code + '''' + ','
    dbo.fnDetailsBody(t.Code,t.Date,t.Description)
FROM #tempDetails t

EXEC (@sql);

DROP TABLE #tempDetails;

NB My Function fnDetailsBody() 電子メールのパラメーターに基づいて、HTML の NVARCHAR 文字列を返します。

ただし、これは機能しており、結果テーブルの各メールリターンにメールを送信しています。

これは、各行に電子メールを送信するためにwhile /カーソルを使用せずにこれにアプローチする最良の/唯一の方法ですか?

どうもありがとう。

4

0 に答える 0