2012-02-15 4 views
1

SELECT의 각 행에 대해 저장 프로 시저를 실행할 수 있습니까?SELECT 문의 각 행에 대해 OUTPUT을 사용하여 저장 프로 시저 실행

Declare 
     @Loop bit = 1, @ID int, @Exists bit, @ReturnValue bit = 0 

    WHILE (@Loop) = 1 
     BEGIN 

      SELECT @ID = ID FROM Table --Multiple Rows Returned 

      EXEC [dbo].[StoredProc1] --Exec SP for Each Row 
       @InputID = @ID 
       ,@Exists = @Exists OUTPUT 

      IF @Exists = 1 
       BEGIN 
        SET @Loop = 0 
        SET @ReturnValue = 1 
       END 

     END 

    SELECT @ReturnValue [ReturnValue] 

답변

5

가 커서 사용 : 이것은 단지 모든 행을 실행하기 위해 뭔가를 찾고, 첫 번째 행을 실행이 흡수 조금 걸릴 것

DECLARE @exists  bit 
DECLARE db_cursor CURSOR FOR 
SELECT ID 
FROM Table 

OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @ID 

WHILE @@FETCH_STATUS = 0 
BEGIN 
     EXEC [dbo].[StoredProc1] --Exec SP for Each Row 
      @ID 
      , @exists OUTPUT 

     FETCH NEXT FROM db_cursor INTO @id 
END 

CLOSE db_cursor 
DEALLOCATE db_cursor 
+0

을하지만, 그것을 작동, 감사합니다! –

+0

LOCAL STATIC READ_ONLY FORWARD_ONLY를 커서 선언에 추가하는 것이 좋습니다. –

+0

@AaronBertrand : 그런 부두 뭉치를 추천한다면, 이유를 지정해야합니다. 그렇지 않으면화물 컬트 프로그래밍을 권장합니다. 나는 왜 당신이'STATIC' 커서에'READ_ONLY FORWARD_ONLY'을 지정해야하는지 잘 모르겠다. 잘못 사용하면'정적'을 사용하면 꽤 심각한 반향을 일으킬 수있다. 주어진 코드처럼 닫힐 때 할당 해제되는 커서에'LOCAL'이 필요합니까? – Gabe

관련 문제