Dans SQL Server 2012, la norme ANSI OFFSET
est prise en charge. / FETCH
syntaxe. J'ai blogué sur ceci
et voici la doc officielle (c'est une extension de ORDER BY
). Votre syntaxe convertie pour SQL Server 2012 serait :
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;
Avant cela, vous devez utiliser diverses solutions de contournement, y compris le ROW_NUMBER()
méthode. Voir cet article
et la discussion de suivi
. Si vous n'êtes pas sur SQL Server 2012, vous ne pouvez pas utiliser la syntaxe standard ou le LIMIT
non standard de MySQL mais vous pouvez utiliser une solution plus détaillée telle que :
;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;
Il existe de nombreuses autres façons de dépouiller ce chat, ce n'est probablement pas le plus efficace, mais la syntaxe est probablement la plus simple. Je suggère de revoir les liens que j'ai publiés ainsi que les suggestions en double notées dans les commentaires de la question.