3

我知道 sqlserver 中没有limit x,y,而不是我使用:

 select  ROW_NUMBER(),name OVER (ORDER BY name) AS
 myrow from pack  where myrow > 5 and myrow < 10

但它有以下错误:

Msg 207, Level 16, State 1, Line 1
Invalid column name 'myrow'.
Msg 207, Level 16, State 1, Line 1
Invalid column name 'myrow'.

任何想法?

Edit

我在 SQL Server 中看到了 mysql“LIMIT”子句的等效语法是什么,但它并没有解决我的问题。

4

2 回答 2

1

试试这个(2005 年及更高版本)-

SELECT p.name
FROM ( 
    SELECT  
          name
        , myrow = ROW_NUMBER() OVER (ORDER BY name)  
    FROM dbo.pack
) p
WHERE myrow BETWEEN 5 AND 9

或者试试这个(2012 年)——

SELECT name
FROM dbo.pack
ORDER BY name 
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY
于 2013-05-27T13:51:33.517 回答
1

在 SQL Server 2012 中有OFFSET FETCH语法

但是,对于旧版本,您必须在派生表中使用 ROW_NUMBER

select
    name
from
    (
    select
       name,
       ROW_NUMBER() OVER (ORDER BY name) AS myrow
    from
       pack
    ) X
where
   myrow > 5 and myrow <= 10

根据建议的副本中的建议答案,不要使用 3 个嵌套的 TOP

于 2013-05-27T13:51:35.620 回答