Mysql
 sql >> Database >  >> RDS >> Mysql

Clausola MySQL LIMIT equivalente per SQL SERVER

In SQL Server 2012 è disponibile il supporto per lo standard ANSI OFFSET / FETCH sintassi. Ho bloggato su questo ed ecco il documento ufficiale (questa è un'estensione di ORDER BY ). La tua sintassi convertita per SQL Server 2012 sarebbe:

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;

Prima di ciò, devi utilizzare varie soluzioni alternative, incluso ROW_NUMBER() metodo. Vedi questo articolo e la discussione successiva . Se non utilizzi SQL Server 2012, non puoi utilizzare la sintassi standard o il LIMIT non standard di MySQL ma puoi usare una soluzione più dettagliata come:

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

Ci sono molti altri modi per scuoiare questo gatto, è improbabile che sia il più efficiente, ma dal punto di vista della sintassi è probabilmente il più semplice. Suggerisco di rivedere i link che ho postato così come i suggerimenti duplicati annotati nei commenti alla domanda.