2012-08-08 41 views
3

在MySQL中,我们使用LIMIT和SQL Server必须使用TOP代替LIMIT,但我们可以在使用这种方式LIMIT转换LIMIT到TOP

Limit X, Y其中X为出发点和Y是持续时间。

现在我该如何使用TOP这样的例子?

+0

http://stackoverflow.com/questions/971964/limit-10-20-in-sqlserver – 2012-08-08 12:21:53

+0

http://stackoverflow.com/questions/ 216673/emulate-mysql-limit-clause-in-microsoft-sql-server-2000 – 2012-08-08 12:22:37

+0

http://stackoverflow.com/questions/603724/how-to-implement-limit-with-microsoft-sql-server – 2012-08-08 12:23:00

回答

4

您可以使用ROW_NUMBER()函数,与CTE(公共表表达式)

ROW_NUMBER

with cte as(
select *,ROW_NUMBER() over (order by col1) as rownumber from <table>) 
select * from cte where rownumber between x and y 
+0

@gbn是的,我的坏。像你一样继续:) +1回答。 – Fluffeh 2012-08-08 12:22:55

+0

@Fluffeh:问题是 - 相当于sql服务器中的限制x,y – 2012-08-08 12:22:58

3

您不能SQL Server 2012中添加这之前FETCH..OFFSET

所以,你需要“page”使用ROW_NUMBER函数。实例:

+0

即使在SQL Server 2000中也不行? 'SELECT TOP 5 * FROM(SELECT TOP 10 * FROM tbl ORDER BY id DESC)as data ORDER BY id ASC'或许不推荐使用其他选项,但至少它存在... – MatBailie 2012-08-08 12:51:51

+1

@Dems:是的。我认为民间至少会在SS 2005上。在2012年 ;-) – gbn 2012-08-08 12:57:39