2013-02-11 34 views

Trả lời

15

ANSI/ISO SQL: 2003 giới thiệu chức năng cửa sổ:

SELECT * FROM (
    SELECT 
    ROW_NUMBER() OVER (ORDER BY age ASC) AS rownum, 
    person_id, 
    person_name, 
    age 
    FROM person 
) AS foo 
WHERE rownum <= 3 

Microsoft SQL Server đã hỗ trợ cú pháp này kể từ SQL Server 2005. http://msdn.microsoft.com/en-us/library/ms189798(v=sql.90).aspx

ANSI/ISO SQL: 2008 giới thiệu một đơn giản hơn cú pháp cho FETCH FIRST, có thể giống với cú pháp của Microsoft/Sybase TOP:

SELECT person_id, person_name, age FROM person 
FETCH FIRST 3 ROWS ONLY 

Microsoft chưa hỗ trợ cú pháp này. Xem thêm http://en.wikipedia.org/wiki/Select_(SQL)#Limiting_result_rows

Nếu bạn vẫn đang sử dụng Microsoft SQL Server 2000, bạn nên đọc một câu hỏi tôi đã đăng một khi trở lại về làm "phân trang" truy vấn phong cách: Emulate MySQL LIMIT clause in Microsoft SQL Server 2000

+3

Tôi thậm chí không biết rằng ROW_NUMBER() OVER là ANSI SQL? – Andrew

Các vấn đề liên quan