有谁知道为什么这段代码会向用户发送重复的电子邮件?

时间:2013-09-11 14:03:54

标签: sql sql-server sql-server-2008

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

找到记录后,存储的proc会调用带有传递参数的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

2 个答案:

答案 0 :(得分:1)

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

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

     SELECT @email = @email+';'+Email

答案 1 :(得分:0)

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

从一些调试开始:

  1. 评论您的EXEC部分
  2. 在同一地点添加PRINT @email
  3. 运行光标并查看结果,它们应该很有启发性!
  4. 基本上你正在做的是每个光标执行,你正在构建所有 GRVRIEVANCES WHERE sentFlag = 'No'的这一大串电子邮件地址。