2010-07-12 3 views
2

큰 결과 집합을 반환하는 기존 저장 프로 시저가 있습니다. 문제는 결과 집합이 너무 커서 한꺼번에 모두 가져온 다음 웹 측에서 페이징 및 정렬을 수행 할 수 없다는 것입니다.기존 저장 프로 시저로 페이징 및 정렬

저장 프로 시저를 변경하지 않고 다른 SQL 코드로 래핑하여 특정 결과 만 빠른 방식으로 되돌릴 수 있습니다. 같은

뭔가 :

EXEC는 옵션이 매우 제한되어 저장 프로 시저 코드를 변경하지 않고

답변

1

50 ORDER을 제한 the_sp.

당신은 그것을 여전히 저장된 프로 시저 자체가 작품의 같은 양의 일을 끝낼 (그리고 임시 테이블 단계에 대한 약간의 오버 헤드를 추가)하지만 결과의 양을 줄일 것 분명히

CREATE TABLE #results(
    [rownum] [int] identity(1,1) NOT NULL, 
    ...Other Columns matching stored procedure result format 
) 

insert into #results 
EXECUTE dbo.the_sp 

SELECT * FROM #results 
WHERE rownum BETWEEN 50 AND 100 

을 할 수

고객에게 돌아갑니다.

이를 완화하기 위해, 그리고 하나

그러나이 같은

를 표시 후 저장 프로 시저의 논리에 따라, 당신은이 페이지에 속하는 불필요한 결과를 반환 중지하려면

SET ROWCOUNT 100 
EXECUTE dbo.the_sp 

을 사용할 수 있습니다 저장된 proc의 모든 문장에 적용됩니다 (최종 결과를 클라이언트에 반환하는 것뿐만 아니라). 이것은 적합하지 않을 수 있습니다.

관련 문제