我们有一个存储过程应该检查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
答案 0 :(得分:1)
如果您将电子邮件设置为循环内的初始值,问题是否会消失?另外,请确保将sentflag设置为“yes”。
WHILE @@FETCH_STATUS = 0
BEGIN
SET @email=''
SELECT @email = @email+';'+Email
答案 1 :(得分:0)
回到基础以解决这个问题。
从一些调试开始:
EXEC
部分PRINT @email
基本上你正在做的是每个光标执行,你正在构建所有 GRVRIEVANCES WHERE sentFlag = 'No'
的这一大串电子邮件地址。