一些数据库支持如下命令:
SELECT TOP 10 START AT 10 * FROM <TABLE>
我需要获取前10条记录,然后是接下来的10条,再然后是下一个10条,以此类推。也许还有别的方法可以做到这一点,但之前我在支持“START AT”功能的数据库上就是像上面所述这样做的。
一些数据库支持如下命令:
SELECT TOP 10 START AT 10 * FROM <TABLE>
我需要获取前10条记录,然后是接下来的10条,再然后是下一个10条,以此类推。也许还有别的方法可以做到这一点,但之前我在支持“START AT”功能的数据库上就是像上面所述这样做的。
SELECT *
FROM <TABLE>
ORDER BY <SomeCol>
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
<order by clause>
中添加这样的扩展(见5CD2-02-Foundation-2006-01.pdf中的第837页)。但那只是一个草案,所以也许在最终的SQL:2008标准文档中,他们实际上已经添加了那个子句...?评论只能在5分钟内编辑(点击此框以关闭) - Lukas Eder需要使用哪个版本的SQL Server?
在SQL Server 2000中,这是一项真正的痛苦(尽管可以使用像stingyjack发布的丑陋技巧等方法来实现)。
在2005年及以后的版本中,它变得更容易了-查看Row_Number()函数。
而且,根据您的客户端应用程序,它甚至可能不那么困难。一些ASP.Net网格控件支持自动分页。
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
如果您想与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;
START AT
子句? - Lukas Eder