2016-09-21 33 views
0

嘿夥計,光標將不會獲取第二個值

我遇到了TSQL和遊標有點問題。我的光標設想循環瀏覽mailadresses的列表(視圖)。我的代碼是這樣的:

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,'defg',@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 
     FETCH NEXT FROM cur INTO @emailAddress 
    END 
Close cur 
DEALLOCATE cur 

所以我的問題是,光標會運行2次,如果有在視圖2個mailadresses,但我得到了相同的郵件的2倍,而不是2個不同的郵件。 (我是CC的一部分,看看它是否有效)

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

問候,

靈魂

回答

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 
+0

那麼你不知何故得到了正確的觀點,我能夠解決它。我必須將「@MyResult」的初始化移動到光標中。 – Soulrox