2008-11-12 27 views
9

Một số cơ sở dữ liệu hỗ trợ các lệnh như:Có tương đương 'BẮT ĐẦU AT' trong MS-SQL không?

SELECT TOP 10 START AT 10 * FROM <TABLE> 

Về cơ bản tôi cần phải kéo 10 hồ sơ đầu tiên, sau đó tiếp theo 10, sau đó tiếp theo 10 vv Có lẽ có một cách khác để làm điều này nhưng trong tôi qua đã thực hiện nó như trên cho các cơ sở dữ liệu hỗ trợ 'BẮT ĐẦU AT'.

+0

tôi tò mò, những gì sở dữ liệu khác ngoài Sybase SQL Anywhere hỗ trợ 'BẮT ĐẦU AT' khoản? –

Trả lời

5

Phiên bản SQL Server nào?

Trong SQL Server 2000 đây là một nỗi đau thực sự (mặc dù có thể sử dụng các thủ thuật xấu xí như được đăng bởi stingyjack).

Năm 2005 và sau đó, việc này dễ dàng hơn một chút - hãy xem chức năng Row_Number().

Và, tùy thuộc vào ứng dụng khách của bạn, nó thậm chí có thể không quá khó. Một số điều khiển lưới ASP.Net có hỗ trợ phân trang tự động.

4
SELECT Top 10 * 
FROM Table 
WHERE <primary key> Not IN (
    SELECT Top 10 <primaryKey> 
    FROM Table 
    ORDER BY <primary Key> ASC) 
ORDER BY <primary Key> ASC 
4

Nếu bạn muốn để tương thích với SQL Server 2000 bạn có thể sử dụng

SELECT * FROM 
(
    SELECT TOP 10 FROM 
    (
     SELECT TOP (n * 10) FROM <table> ORDER BY (column) ASC 
    ) AS t1 ORDER BY (column) DESC 
) AS t2 ORDER BY (column) ASC 

Trong SQL Server 2005 có một chức năng ROW_NUMBER mới(). Bạn có thể sử dụng nó theo cách này:

WITH Orders AS 
(
    SELECT SalesOrderID, OrderDate, 
    ROW_NUMBER() OVER (order by OrderDate) AS 'RowNumber' 
    FROM SalesOrder 
) 
SELECT * 
FROM Orders 
WHERE RowNumber between 10 and 19; 
5

Đối SQL Server 2012

SELECT * 
FROM <TABLE> 
ORDER BY <SomeCol> 
OFFSET 10 ROWS 
FETCH NEXT 10 ROWS ONLY; 
+0

Rất vui khi thấy rằng SQL Server cuối cùng cũng thêm một số loại chỉ định một 'OFFSET'! Cú pháp này có vẻ tương thích với DB2, Derby và Ingres ... –

+0

@LukasEder - Đó là chuẩn SQL: 2008 [AFAIK] (http://troels.arvin.dk/db/rdbms/#select-limit-offset) –

+0

Hmm, [cuối cùng SQL: 2008 dự thảo mà tôi đã thấy] (http://www.wiscorp.com/sql200n.zip) không đề cập đến một phần mở rộng như vậy cho '' (trang 837 trong 5CD2-02 -Foundation-2006-01.pdf). Nhưng đó chỉ là một bản nháp, vì vậy có thể trong tài liệu chuẩn cuối cùng của SQL: 2008, họ có thể đã thêm mệnh đề đó ...? Ý kiến ​​chỉ có thể được chỉnh sửa trong 5 phút (bấm vào ô này để loại bỏ) –

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