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;

注意我的函数 fnDetailsBody() 根据电子邮件的参数返回一个 NVARCHAR 字符串的 HTML。

但是,我确实有这个工作,向我的结果表中的每个电子邮件返回发送电子邮件。

这是最好/唯一的方法来解决这个问题而不使用一段时间/光标向每一行发送电子邮件吗?

多谢。

4

0 回答 0