3 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
在SQL Server 2012中,支持ANSI標(biāo)準(zhǔn)OFFSET/ FETCH語法。我在博客上發(fā)表了這篇文章,這是官方文檔(這是的擴(kuò)展ORDER BY)。為SQL Server 2012轉(zhuǎn)換的語法為:
SELECT ID, Name, Price, Image
FROM Products
ORDER BY ID ASC
OFFSET (@start_from - 1) ROWS -- not sure if you need -1
-- because I don't know how you calculated @start_from
FETCH NEXT @items_on_page ROWS ONLY;
在此之前,您需要使用各種解決方法,包括ROW_NUMBER()方法。請(qǐng)參閱本文和后續(xù)討論。如果您不在SQL Server 2012上,則不能使用標(biāo)準(zhǔn)語法或MySQL的非標(biāo)準(zhǔn)語法,LIMIT但可以使用更詳細(xì)的解決方案,例如:
;WITH o AS
(
SELECT TOP ((@start_from - 1) + @items_on_page)
-- again, not sure if you need -1 because I
-- don't know how you calculated @start_from
RowNum = ROW_NUMBER() OVER (ORDER BY ID ASC)
/* , other columns */
FROM Products
)
SELECT
RowNum
/* , other columns */
FROM
o
WHERE
RowNum >= @start_from
ORDER BY
RowNum;
還有很多其他方法可以為這只貓蒙皮,這可能不是最有效的方法,但是從語法角度來說可能是最簡(jiǎn)單的方法。我建議查看我發(fā)布的鏈接以及對(duì)該問題的評(píng)論中指出的重復(fù)建議。

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
對(duì)于SQL Server 2005和2008這是一個(gè)示例查詢,用于從LastName排序的報(bào)表表中選擇11到20的行。
SELECT a.* FROM
(SELECT *, ROW_NUMBER() OVER (ORDER BY LastName) as row FROM Report) a
WHERE a.row > 10 and a.row <= 20

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
嘗試這個(gè):
SELECT TOP $items_on_page ID, Name, Price, Image
FROM (SELECT TOP $start_from + $items_on_page - 1 * FROM Products ORDER BY ID) as T
ORDER BY ID DESC
編輯:解釋-
沒有繞過子查詢,但這是一個(gè)優(yōu)雅的解決方案。假設(shè)您要從10第5th行開始每頁放置項(xiàng)目,這將使您在最10上面14幾行的最下面一行。實(shí)質(zhì)上LIMIT 5,10
添加回答
舉報(bào)