기존 복잡한 쿼리로 구현했던 페이징을 OFFSET~FETCH 키워드를 이용하여 단순한 T-SQL 쿼리 가능해졌다.
많이 ~~ 좋아졌네^^
Syntax
ORDER BY
order_by_expression
[ COLLATE
collation_name ]
[ ASC | DESC ]
[ ,...
n ]
[ <offset_fetch> ]
<offset_fetch> ::=
{
OFFSET {
integer_constant |
offset_row_count_expression } { ROW | ROWS }
[
FETCH { FIRST | NEXT } {
integer_constant |
fetch_row_count_expression } { ROW | ROWS } ONLY
]
}
기존 페이징과 2011의 OFFSET 키워드를 이용한 쿼리 비교
USE AdventureWorks2008R2
GO
DECLARE
@PageSize TINYINT = 20,
@CurrentPage INT = 1500;
WITH o AS
(
SELECT TOP (@CurrentPage * @PageSize)
[RowNumber] = ROW_NUMBER() OVER (ORDER BY SalesOrderID),
SalesOrderID
, SalesOrderNumber
, OrderDate
, SubTotal
FROM
Sales.SalesOrderHeader
)
SELECT SalesOrderID
, SalesOrderNumber
, OrderDate
, SubTotal
FROM o
WHERE
[RowNumber] BETWEEN ((@CurrentPage - 1) * @PageSize + 1)
AND (((@CurrentPage - 1) * @PageSize) + @PageSize)
ORDER BY
[RowNumber];
GO
DECLARE
@PageSize TINYINT = 20,
@CurrentPage INT = 1500;
SELECT SalesOrderID
SalesOrderID
, SalesOrderNumber
, OrderDate
, SubTotal
FROM Sales.SalesOrderHeader
ORDER BY SalesOrderID
OFFSET (@PageSize * (@CurrentPage - 1)) ROWS
FETCH NEXT @PageSize ROWS ONLY;
복잡한 쿼리가 아주 단순해 졌다.
성능부분에서도 성능이 크게 향상되거나 좋아진 부분은 없는듯 ㅠㅠ
'SQL Server 2012' 카테고리의 다른 글
결과창 보기 단축키 다시 사용하기~~ CTRL+R (2) | 2012.03.29 |
---|---|
SQL SERVER 2012 EDITIONS (2) | 2012.03.23 |
SQL 2012 New Feature - Windows Function (0) | 2012.03.06 |
Free ebook: Introducing Microsoft SQL Server 2012 (0) | 2012.02.17 |
SQL 2012 New Feature - SEQUENCE GENERATOR (0) | 2012.02.16 |