首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为sql结果集的每一行调用sdb.dbo.sp_send_dbmail

如何为sql结果集的每一行调用sdb.dbo.sp_send_dbmail
EN

Stack Overflow用户
提问于 2016-01-06 14:29:23
回答 1查看 723关注 0票数 2

我有一个名为EMails的Server表,它由以下列组成

  • Id int
  • 主语nvarchar(100)
  • Body nvarchar(最大)
  • 受体nvarchar(100)
  • IsSent钻头

我的应用程序填充它。

我想使用Server发送电子邮件。

我知道如何发送电子邮件

代码语言:javascript
运行
复制
EXEC msdb.dbo.sp_send_dbmail

但是,查询

代码语言:javascript
运行
复制
SELECT Subject,Body,Recipient FROM EMails
WHERE IsSent=0

可以返回到多个

我还想在邮件发送后将IsSent设置为1

问题:

  1. 是否可以使用计划好的SQL server作业。如果是这样的话,你能提供一个代码示例吗?
  2. 当查询放在每15分钟运行一次的sql server作业中时,建议最多发送50封电子邮件吗?
EN

回答 1

Stack Overflow用户

发布于 2016-01-06 14:45:36

代码语言:javascript
运行
复制
DECLARE @Subject NVARCHAR(100),
        @Body NVARCHAR(MAX),
        @Recipient NVARCHAR(100),
        @ID INT,
        @MailID INT

DECLARE @mails TABLE (ID INT, MailID INT)

DECLARE cur CURSOR FAST_FORWARD READ_ONLY LOCAL FOR
    SELECT ID, [Subject], Body, Recipient
    FROM dbo.EMails
    WHERE IsSent = 0

OPEN cur

FETCH NEXT FROM cur INTO @ID, @Subject, @Body, @Recipient

WHILE @@FETCH_STATUS = 0 BEGIN

    EXEC msdb.dbo.sp_send_dbmail
        @profile_name = '....',
        @recipients   = @Recipient,
        @subject      = @Subject,
        @body         = @Body,
        @mailitem_id  = @MailID OUTPUT

    INSERT INTO @mails (ID, MailID)
    VALUES (@ID, @MailID)

    FETCH NEXT FROM cur INTO @ID, @Subject, @Body, @Recipient

END

CLOSE cur
DEALLOCATE cur

WAITFOR DELAY '00:00:01'

UPDATE u
SET IsSent = 1
FROM dbo.EMails u
JOIN @mails m ON u.ID = m.ID
JOIN msdb.dbo.sysmail_mailitems s ON m.MailID = s.mailitem_id
WHERE s.sent_status = 1

-- failed mails

SELECT s.recipients, s.[subject], s.body, s.sent_status
FROM @mails m
JOIN msdb.dbo.sysmail_mailitems s ON m.MailID = s.mailitem_id
WHERE s.sent_status != 1
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34635550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档