2016-09-21 3 views
0

안녕하십니까,커서가 두 번째 값을 가져 오지 않습니다.

나는 TSQL 및 커서에 약간의 문제가 있습니다. 내 커서는 메일 수신자 목록 (보기)을 반복합니다. 내 코드는 다음과 같이 진행됩니다

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

관련 문제