游标不会获取第二个值

时间:2016-09-21 06:06:41

标签: sql sql-server tsql

喜欢乡亲,

我在TSQL和游标方面遇到了一些问题。我的光标想要循环遍历mailadresses的列表(视图)。我的代码是这样的:

$function() 

所以我的问题是如果视图中有2个mailadresses,光标会运行2次,但我得到相同邮件的2倍而不是2个不同的邮件。 (我是CC的一部分,看它是否有效)

希望有人有一些想法,可以帮助我。

问候,

灵魂

1 个答案:

答案 0 :(得分:1)

我已经解决了你的问题,我也执行了你使用的游标,它运行正常。根据我的理解,下面的代码可能会产生问题。

SET @MyResult = Replace(@MyResult,'defg',@emailAddress)

我认为由于问题正在发生,它无法替换上一次迭代的电子邮件地址。看来你想在这里用当前迭代的电子邮件地址替换上一次迭代的电子邮件地址,以便下面的代码可能有所帮助。

SET @oldEmailAddress = 'defg'
set @sqlstatement = 'Declare cur CURSOR FOR SELECT ' + @col + ' 
FROM ' + @view + ' group by ' + @col
exec sp_executesql @sqlstatement

OPEN cur

FETCH NEXT FROM cur INTO @emailAddress
WHILE @@FETCH_STATUS = 0 BEGIN

SET @MyRecipients = @emailAddress;
SET @MyResult = Replace(@MyResult,@oldEmailAddress,@emailAddress)
SELECT @MyResult

    IF @@ROWCOUNT > 0
    begin   
    EXEC dbo.[Excel] @html = @html OUTPUT,@query = @MyResult

        IF @html != ''
        begin
            EXEC msdb.dbo.sp_send_dbmail
            @profile_name = 'Operator',
            @recipients= @MyRecipients, 
            @body = @html,
            @body_format = 'HTML',
            @subject= @MySubject,
            @copy_recipients = @MyCC
        ;                       
        END
    END 

    SET @oldEmailAddress = @emailAddress

    FETCH NEXT FROM cur INTO @emailAddress
END
Close cur 
DEALLOCATE cur