Итерация SQL и отправка электронных писем с вложенными переменными в запросе

#sql #sql-server #variables #stored-procedures #sp-send-dbmail

Вопрос:

В настоящее время я пытаюсь создать запланированное задание, в котором код проходит через таблицу и отправляет данные из другой таблицы на текущий адрес электронной почты. У меня возникли проблемы с передачей переменных во вложенный запрос, который использует sp_send_dbmail. Любая помощь будет очень признательна. Мой код до сих пор таков

 DECLARE @LMax INT<br/>
DECLARE @LoopNo INT<br/>
DECLARE @Eng VARCHAR(50)<br/>
DECLARE @html nvarchar(MAX)<br/>
<br/>
SET @LoopNo = 1<br/>
SET @LMax = (Select MAX (RowNo) FROM EmailList)<br/>
WHILE @LoopNo <= @LMax<br/>
    BEGIN<br/>
        SET @EmailRecipient = (Select Email FROM EmailList where RowNO = **@LoopNo**)<br/>
        EXEC master.dbo.spQueryToHtmlTable @html = @html OUTPUT,  @query = 
        N'<br/>
        SELECT *<br/>
        FROM EmailInfo<br/>
        WHERE EmailAddress LIKE (Select EmailAddress FROM EmailRecipient where RowNo = ***@LoopNo***)<br/>
        <br/>
EXEC msdb.dbo.sp_send_dbmail<br/>
    @profile_name = 'xxx',<br/>
    @recipients = @EmailRecipient,<br/>
    @subject = 'Message',<br/>
    @body = @html,<br/>
    @body_format = 'HTML',<br/>
    @query_no_truncate = 1,<br/>
    @attach_query_result_as_file = 0;<br/>
    SET @LoopNo = @LoopNo  1;<br/>

    END;
 

Комментарии:

1. Похоже, вы исказили свой сценарий при публикации. Я могу сказать, что если вам нужен курсор, то просто используйте чертов курсор. Ваш цикл while по увеличенному значению не является улучшением и содержит в себе рискованные (в некоторой степени) предположения. Какие «проблемы» у вас возникли? Мы не можем читать мысли или видеть ваш экран. У нас также нет вашей хранимой процедуры — это работает с?