MySQL LIMIT子句等效于SQL SERVER

Ziz*_*o47 4 mysql sql-server

我一直在阅读有关SQL SERVER的LIMIT子句替代方法的大量内容.令人沮丧的是,他们仍然拒绝改编它.无论如何,我真的无法理解这一点.我试图转换的查询是这个......

SELECT ID, Name, Price, Image FROM Products ORDER BY ID ASC LIMIT $start_from, $items_on_page
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助,谢谢.

Aar*_*and 25

在SQL Server 2012中,支持ANSI标准OFFSET/ FETCH语法.我在博客上写了这个,这是官方文档(这是一个扩展ORDER BY).为SQL Server 2012转换的语法将是:

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;
Run Code Online (Sandbox Code Playgroud)

在此之前,您需要使用各种变通方法,包括ROW_NUMBER()方法.请参阅此文章后续讨论.如果您不在SQL Server 2012上,则不能使用标准语法或MySQL的非标准语法,LIMIT但您可以使用更详细的解决方案,例如:

;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;
Run Code Online (Sandbox Code Playgroud)

还有很多其他方法可以让这只猫受到影响,这不太可能是最有效的,但语法方面可能是最简单的.我建议您查看我发布的链接以及问题评论中提到的重复建议.