0

我们有一个存储过程,它应该检查 db 并选择所有 sentFlag 为 No 的记录。

一旦找到记录,存储过程就会使用传递的参数调用 sp_send_dbmail,然后向受影响的个人发送电子邮件。

这似乎有效。

到目前为止,我们遇到的问题是每个人都收到重复的电子邮件。

任何想法此代码的哪一部分可能导致此问题?

 OPEN MAIL_CURSOR

 FETCH MAIL_CURSOR into @mail1, @sender,@content1

 WHILE @@FETCH_STATUS = 0
 BEGIN

    SELECT @email = @email+';'+Email
    FROM GRVRIEVANCES
    WHERE sentFlag = 'No'


EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Grievances', 
@recipients = @email, 
@subject = 'Account Details',
@body = @content1;


 FETCH MAIL_CURSOR INTO @mail1, @sender, @content1
 END

 CLOSE MAIL_CURSOR
 DEALLOCATE MAIL_CURSOR
 END
4

2 回答 2

1

如果您在循环中将电子邮件设置为初始值,问题会消失吗?另外,请确保将 sentflag 设置为“是”。

 WHILE @@FETCH_STATUS = 0
  BEGIN
     SET  @email=''

     SELECT @email = @email+';'+Email
于 2013-09-11T14:14:36.133 回答
0

回到基础来解决这个问题。

从一些调试开始:

  1. 注释掉你的EXEC部分
  2. PRINT @email在同一个地方添加
  3. 运行游标看看结果,应该很有启发性!

本质上,您所做的是在每次执行光标时,您都在为所有 GRVRIEVANCES WHERE sentFlag = 'No'.

于 2013-09-11T14:25:25.987 回答