Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Cláusula MySQL LIMIT equivalente para SQL SERVER


No SQL Server 2012, há suporte para o padrão ANSI OFFSET / FETCH sintaxe. Eu blog sobre isso e aqui está o documento oficial (esta é uma extensão para ORDER BY ). Sua sintaxe convertida para o SQL Server 2012 seria:
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;

Antes disso, você precisa usar várias soluções alternativas, incluindo o ROW_NUMBER() método. Consulte este artigo e a discussão posterior . Se você não estiver no SQL Server 2012, não poderá usar a sintaxe padrão ou o LIMIT não padrão do MySQL mas você pode usar uma solução mais detalhada, como:
;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;

Existem muitas outras maneiras de esfolar esse gato, é improvável que seja a mais eficiente, mas a sintaxe é provavelmente a mais simples. Sugiro revisar os links que postei, bem como as sugestões duplicadas observadas nos comentários da pergunta.