2013-09-11 3 views
0

У нас есть хранимая процедура, которая должна проверить БД и выбрать все записи, в которых sentFlag находится под номеромКто-нибудь знает, почему этот код отправляет пользователям дубликаты писем?

После записи (ей) найден, хранимая процедура вызывает 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

Не уверен, что это * проблема *, но я бы сильно подозревал, что вы не должны просто создавать все больше и больше адресов электронной почты в '@ email', не очищая их. –

+0

@Damien_The_Unbeliever, нет, это не проблема, потому что как только электронное письмо отправляется, тогда sentFlag обновляется и изменяется на 'Да'. Я действительно показывал этот код, потому что не думал, что это относится к проблеме. Спасибо за предложение. – Kenny

+0

Я считаю, что Дэмиен находится на месте. Запустите свой SP, но закомментируйте 'EXEC' и поместите' PRINT @ email'. Результаты должны быть довольно иллюстративными. – gvee

ответ

1

Если вы задали электронную почту на начальное значение в цикле, проблема исчезнет? Кроме того, убедитесь, что вы установили sendflag в «yes».

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

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

@Damien_The_Unbeliever, я не знаю, похоже ли ваше предложение на решение SpectraGhost. Я попробовал его, и проблема, похоже, исчезла, хотя я все еще очень смущен. – Kenny

0

Назад к основам для решения этой проблемы.

Начните с некоторой отладки:

  1. Закомментируйте ваш EXEC часть
  2. Добавить PRINT @email в том же месте
  3. Run курсор и увидеть reults, они должны быть весьма поучительно!

По существу, что вы делаете на каждое исполнении курсора вы строите эту большое ПР.»строку адреса электронной почты для всехGRVRIEVANCES WHERE sentFlag = 'No'.

Смежные вопросы