我知道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,但它没有解决我的问题。
答案 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