代码之家  ›  专栏  ›  技术社区  ›  Douglas Anderson

MS-SQL中是否有“起始点”等效项?

  •  10
  • Douglas Anderson  · 技术社区  · 17 年前

    SELECT TOP 10 START AT 10 * FROM <TABLE>
    

    基本上,我需要提取前10条记录,然后是下10条记录,然后是下10条记录,等等。也许还有其他方法可以做到这一点,但在过去,对于支持“开始于”的数据库,我是这样做的。

    4 回复  |  直到 14 年前
        1
  •  8
  •   Martin Smith    14 年前

    对于 SQL Server 2012

    SELECT * 
    FROM <TABLE>
    ORDER BY <SomeCol>
    OFFSET 10 ROWS
    FETCH NEXT 10 ROWS ONLY;
    
        2
  •  5
  •   Joel Coehoorn    17 年前

    Row_Number() 作用

    而且,取决于您的客户端应用程序,这甚至可能没有那么难。一些ASP.Net网格控件支持自动分页。

        3
  •  4
  •   Joel Coehoorn    17 年前
    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
  •  4
  •   splattne    17 年前

    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;