2012-05-15 2 views
4

수십만 개의 레코드가있는 테이블의 응용 프로그램에서보기를 만들어야합니다. 명백한 이유로, 나는 한 번에 그들을 모두 검색하고 싶지 않습니다.특정 레코드 간격을 반환하는 저장 프로 시저

관례는 데이터베이스 테이블을 쿼리하는 저장 프로 시저를 만드는 것이므로 내 계획은 레코드의 간격을 반환하는 저장 프로 시저를 만드는 것입니다 (레코드 2000에서 3000 등). TOP으로 레코드 범위를 검색하기 위해 중첩 쿼리를 사용하는 방법을 알고 있지만, 알 수 있듯이 매개 변수를 TOP으로 parametrize 할 수는 없습니다.

이 데이터 집합은 C# 응용 프로그램의 데이터 집합과 DataTable과 함께 사용됩니다.

어떻게해야합니까?

답변

4

SQL Server 2008에서 ROW_NUMBER를 활용할 수 있습니다. 쿼리는 행 번호에 따라 10 개의 행만 반환합니다.

WITH Ordered AS (
SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate 
FROM Orders) 
SELECT * 
FROM Ordered 
WHERE RowNumber BETWEEN 21 AND 30 
+0

꽤 멋지다가 제거됩니다. TOP의 속임수. – zneak

3

인수를 맨 위에 매개 변수화합니다. 인수는 중괄호로 묶습니다.

어쨌든 모든 것이 필요할 경우 모든 것을 한 번에 가져 오는 것이 더 효율적입니다. 덩어리를 칠 필요가 없습니다.

+0

필자에게 꼭 필요한 것은 아닙니다. 누구나 소수의 최상위 행 이상에 관심이있는 것은 놀랄 것입니다.하지만 여전히 기능을 지원해야합니다. 나는 한 번에 천 정도를 되 찾을 것입니다. – zneak

+0

[여기]와 같은 CTE로 페이지 할 수 있습니다. (http://weblogs.sqlteam.com/jeffs/archive/2007/03/30/More-SQL-Server-2005-Solutions.aspx) –