2014-03-05 2 views
1

나는 거대한 MSSQL db를 가지고 있으며, 정확하게 행을 제한하고 싶습니다.MSSQL의 LIMIT 및 TOP

WITH SmallerFetch AS 
     (
      SELECT *, 
        ROW_NUMBER() OVER (ORDER BY columns) AS RowNumber 
      FROM dbo.table 
     ) 
    SELECT columns 
    FROM SmallerFetch 
    WHERE RowNumber BETWEEN {$offset} AND {$limit} 

지금,이 작품은 다음과 같습니다

내가 주변에 검색 좀하신 SQL이다. 그러나, 나는 클라이언트 측에 많은 필터를 가지고 있으며 오프셋과 제한 사이의 행을 얻고 싶지 않습니다. 오히려 SELECT * FROM table WHERE something LIKE '%mssql really needs a limit function%'과 같은 쿼리에 해당하는 모든 행을 얻고 싶지만 여전히 내 페이지 매김 기능을 보존하고 싶습니다.

TOPTOPFROM 절 내에 사용했지만 작동하지 않았거나 검색에 대해 올바른 행을 반환하지 않았습니다.

클라이언트 측에서 jQuery 용 DataTables 라이브러리를 사용하고 있는데이 라이브러리는 AJAX로 직접 응답 (쿼리) 스크립트에 연결됩니다.

나는이 게시물에서 뭔가를 놓친 것일 수도 있지만 내 질문과 관련하여 의견 및 질문에 답변 할 것입니다. 왜 MSSQL이 MySQL만큼 쉽지 않을까요?

답변

4

필터링을 CTE로 이동하지 않는 이유는 무엇입니까?

과 같이 뭔가 : 당신은 대통령이해야

;WITH SmallerFetch AS 
(
    SELECT  columns, 
       ROW_NUMBER() OVER (ORDER BY columns) AS RowNumber 

    FROM  dbo.table 

    WHERE  something LIKE '%mssql really needs a limit function%' 
) 
SELECT columns 

FROM SmallerFetch 

WHERE RowNumber BETWEEN @offset AND @limit 
+0

. 나는 어떻게 생각하지도 않았다. – NicT