Sql server sqlserver中的分页

Sql server sqlserver中的分页,sql-server,sql-server-2005,tsql,pagination,Sql Server,Sql Server 2005,Tsql,Pagination,在我的例子中,如何将查询结果限制在大约60K行,并仅从X行选择到Y行 如果我使用ROW_NUMBER,我不喜欢我的查询,因为它涉及2个select查询。。一个用于返回行,另一个用于选择我需要的部分 更新: 以下是我现在使用的查询: SELECT * FROM ( SELECT row_number() OVER (ORDER BY E.LastChangeDate DESC) AS row, E.*, U.[DisplayName] AS EntryCreatorDis

在我的例子中,如何将查询结果限制在大约60K行,并仅从X行选择到Y行

如果我使用ROW_NUMBER,我不喜欢我的查询,因为它涉及2个select查询。。一个用于返回行,另一个用于选择我需要的部分

更新:

以下是我现在使用的查询:

SELECT  *
FROM    (
        SELECT  row_number() OVER (ORDER BY E.LastChangeDate DESC) AS row, E.*, U.[DisplayName] AS EntryCreatorDisplayName, U.[Email] AS EntryCreatorEmail
        FROM    entries e
        INNER JOIN
                users u
        ON      e.fk_user= u.id
        WHERE   e.EntryRank = 2
                AND u.Administrator = 1
        ) as TableWithRows
WHERE   (row >= 31 AND row <= 60)

我不太熟悉MSSQL,但在MySQL中,我会这样做:

LIMIT 50, 10
其中10是要跳过的记录数,50是要获取的记录数

WITH    q AS
        (
        SELECT  TOP (@Y) m.*, ROW_NUMBER() OVER (ORDER BY mycol) AS rn
        FROM    mytable m
        ORDER BY
                mycol
        )
SELECT  *
FROM    q
WHERE   rn >= @X
在SQL Server 2000中:


行数函数可用于此操作。有关用法,请参阅下面的文章

此时此刻无法访问SQL,但您希望这样做吗

SELECT tempid=IDENTITY(int, 1, 1), * FROM tbl WHERE tempid >= @x AND tempid <= @y

表中是否有identiy列?MS SQL 2005,是的,我有identity列,因为我的select中有一个order by over arbirt字段我相信这仅限于SQL Server 2005和up@CodeByMoonlight,抱歉,在我看到您之前添加了评论我使用了这种方法,但这涉及到2个问题是的,在我的例子中,一个是将所有行的大小限制在60K左右,另一个是将它们限制在30行以内。第一次选择需要花费很多时间来执行,这会影响我的整体性能。@Paul:你能发布你的查询吗?可能查询本身需要一些改进。从SELECT row_number中选择*而不是按E.LastChangeDate DESC作为row,E.*,U.[DisplayName]作为EntryCreatorDisplayName,U.[Email]作为EntryCreatorEmail from entries e internal join users u on e.fk_user=u.id其中e.EntryRank=2和u.Administrator=1作为TableWithRows其中row>=31和row只有在我将select插入到临时表中时才起作用这是SQL 2005 rownumber之前已知的解决方法
SELECT tempid=IDENTITY(int, 1, 1), * FROM tbl WHERE tempid >= @x AND tempid <= @y