我很难弄清楚如何让send_dbmail循环遍历我的表并为每条记录发送一封新电子邮件。每次运行此程序包时,我的表都会被删除并重新创建,有时它会有零记录,有时它可能会有一些(从来没有任何重要的,总是<10)。
当我有一行时,这种方法很好但是当我添加第二行时子查询失败,因为它不会产生唯一的结果,所以我的问题是如何让它为每一行发送一个单独的电子邮件存在,如果不存在行,如何使其不发送消息?
我必须通过TEXT正文格式发送此内容,因为它仅由支持文本的第三方邮件收集器抓取。
感谢您的任何建议!
use automationdb
declare @bodytext as nvarchar(max)
set @bodyText = ( SELECT
N'%z_Curr_Contact_Number =
%string1 = na
%string1 = na
%string2 = na
%zneed_by_date = '+ CONVERT(VARCHAR(20), dateadd(day,1,GETDATE()),100) + N'
' + '%Description=' + 'ID: ' + isnull(id,'Unknown') + N'
' + '%Description=' + 'Name: ' + isnull(name,'Unknown') + N'
' + '%Description=' + 'Login: ' + isnull(login,'Unknown') + N'
' + '%Description=' + 'Status: ' + isnull(status,'Unknown') + N'
' + '%Description=' + 'Note One: ' + isnull(note_one,'Unknown') + N'
' + '%Description=' + 'Role: ' + isnull(role_id,'Unknown') + N'
' + '%Description=' + 'Role Name: ' + isnull(role_name,'Unknown') + N'
' + '%Description=' + 'Location: ' + isnull(Location,'Unknown') + N''
FROM dbo.mpt)
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'test',
@body = @bodyText,
@body_format ='TEXT',
@recipients = 'random@email.com',
@subject = 'send_dbmail test' ;
答案 0 :(得分:1)
1)您可以使用LOCAL FAST_FORWARD
cursor阅读每一行,然后执行sp_send_dbmail
或
2)您可以动态生成一个包含EXEC sp_send_dbmail语句列表的sql语句,如下所示:
DECLARE @SqlStatement NVARCHAR(MAX) = N'
EXEC msdb.dbo.sp_send_dbmail @recipients=''dest01@domain.com'', ...;
EXEC msdb.dbo.sp_send_dbmail @recipients=''dest02@domain.com'', ...;
EXEC msdb.dbo.sp_send_dbmail @recipients=''dest03@domain.com'', ...;
...';
EXEC(@SqlStatement);
或
DECLARE @bodyText NVARCHAR(MAX);
SET @bodyText = ...;
DECLARE @SqlStatement NVARCHAR(MAX) = N'
EXEC msdb.dbo.sp_send_dbmail @recipients=''dest01@domain.com'', @body = @pBody, ...;
EXEC msdb.dbo.sp_send_dbmail @recipients=''dest02@domain.com'', @body = @pBody, ...;
EXEC msdb.dbo.sp_send_dbmail @recipients=''dest03@domain.com'', @body = @pBody, ...;
...';
EXEC sp_executesql @SqlStatement, N'@pBody NVARCHAR(MAX)', @pBody = @bodyText;