在MS-SQL中是否有'START AT'等价物?

时间:2008-11-12 18:05:38

标签: sql sql-server

某些数据库支持以下命令:

SELECT TOP 10 START AT 10 * FROM <TABLE>

基本上我需要拉出前10个记录,然后是接下来的10个记录,然后是接下来的10个等等。也许还有另一种方法可以做到这一点但过去我已经像上面那样支持'START AT”。

4 个答案:

答案 0 :(得分:6)

SQL Server 2012

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;