sql >> Databasteknik >  >> RDS >> Mysql

MySQL LIMIT-sats motsvarande för SQL SERVER

I SQL Server 2012 finns det stöd för ANSI-standarden OFFSET / FETCH syntax. Jag bloggade om detta och här är det officiella dokumentet (detta är ett tillägg till ORDER BY ). Din syntax som konverteras för SQL Server 2012 skulle vara:

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;

Innan dess måste du använda olika lösningar, inklusive ROW_NUMBER() metod. Se denna artikel och uppföljningsdiskussionen . Om du inte använder SQL Server 2012 kan du inte använda standardsyntax eller MySQL:s icke-standardiserade LIMIT men du kan använda en mer utförlig lösning som:

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

Det finns många andra sätt att flå den här katten, det är osannolikt att det är det mest effektiva men syntaxmässigt är det förmodligen enklast. Jag föreslår att du granskar länkarna jag har lagt upp samt de dubbletter av förslagen i kommentarerna till frågan.



  1. STRING_SPLIT() i SQL Server 2016:Uppföljning #1

  2. Hur JulianDay()-funktionen fungerar i SQLite

  3. Varför är en UDF så mycket långsammare än en underfråga?

  4. datagrip Kan inte tillämpa ändringar Denna tabell är skrivskyddad. Cellredigeringsändringar kan inte tillämpas