我一直在阅读有关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)
还有很多其他方法可以让这只猫受到影响,这不太可能是最有效的,但语法方面可能是最简单的.我建议您查看我发布的链接以及问题评论中提到的重复建议.
| 归档时间: |
|
| 查看次数: |
17984 次 |
| 最近记录: |