Mysql
 sql >> Base de données >  >> RDS >> Mysql

Équivalent de la clause MySQL LIMIT pour SQL SERVER

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.