SQL Server 2008中mysql“LIMIT”子句的等效语法是什么

时间:2013-05-27 13:46:21

标签: sql-server sql-server-2008-r2

我知道sqlserver中没有limit x,y而不是我使用的:{/ p>

 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

我看到了What is the Equivalent syntax of mysql " LIMIT " clause in SQL Server,但它没有解决我的问题。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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