某些数据库支持以下命令:
SELECT TOP 10 START AT 10 * FROM <TABLE>
基本上我需要拉出前10个记录,然后是接下来的10个记录,然后是接下来的10个等等。也许还有另一种方法可以做到这一点但过去我已经像上面那样支持'START AT”。
答案 0 :(得分:6)
SELECT *
FROM <TABLE>
ORDER BY <SomeCol>
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
答案 1 :(得分:5)
哪个版本的SQL Server?
在SQL Server 2000中,这是一个真正的痛苦(虽然可能使用像stingyjack发布的丑陋技巧)。
在2005年及以后,它更容易看一下Row_Number()功能。
而且,根据您的客户端应用程序,它甚至可能不那么难。一些ASP.Net网格控件支持自动分页。
答案 2 :(得分: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
答案 3 :(得分:4)
如果您想与SQL Server 2000兼容,可以使用
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
在SQL Server 2005中有一个新函数Row_Number()。你可以这样使用它:
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;