2012-08-08 67 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