Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Äquivalent zur MySQL LIMIT-Klausel für SQL SERVER

In SQL Server 2012 wird der ANSI-Standard OFFSET unterstützt / FETCH Syntax. Ich habe gebloggt das und hier ist das offizielle Dokument (Dies ist eine Erweiterung von ORDER BY ). Ihre für SQL Server 2012 konvertierte Syntax wäre:

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;

Zuvor müssen Sie verschiedene Problemumgehungen verwenden, einschließlich ROW_NUMBER() Methode. Siehe diesen Artikel und die Nachfolgediskussion . Wenn Sie nicht SQL Server 2012 verwenden, können Sie die Standardsyntax oder das nicht standardmäßige LIMIT von MySQL nicht verwenden Sie können jedoch eine ausführlichere Lösung verwenden, z. B.:

;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;

Es gibt viele andere Möglichkeiten, diese Katze zu häuten, dies ist wahrscheinlich nicht die effizienteste, aber syntaktisch wahrscheinlich die einfachste. Ich schlage vor, die von mir geposteten Links sowie die doppelten Vorschläge in den Kommentaren zu der Frage zu überprüfen.