旧版 Microsoft SQL Server 版本中 LIMIT 子句的解决方法
Microsoft SQL Server 2000 缺少 ROW_NUMBER()
函数,因此很难复制 MySQL 等数据库中的 LIMIT
子句功能。 存在多种方法,每种方法都有缺点。
使用 TOP
的嵌套查询是一种常见的方法。 但是,当所需范围超过总行数时,此方法会失败,从而导致分页错误,尤其是在最终“页面”上。
另一种技术依赖于表中的唯一列。 这本质上是有限的,因为它取决于合适的唯一标识符的存在。
对于 SQL Server 2005 及更高版本,EXCEPT
语句提供了更强大的解决方案。这涉及将嵌套查询与 EXCEPT
运算符相结合以过滤掉初始行,从而有效地获得所需的子集。
说明性示例:检索第 50 行到 75 行:
<code class="language-sql">SELECT * FROM ( SELECT TOP 75 COL1, COL2 FROM MYTABLE ORDER BY COL3 ) AS foo EXCEPT SELECT * FROM ( SELECT TOP 50 COL1, COL2 FROM MYTABLE ORDER BY COL3 ) AS bar;</code>
总而言之,虽然在 SQL Server 2000 中存在模仿 LIMIT
的变通方法,但没有一个可以在不妥协或不依赖其他功能的情况下完美复制其行为。 对于支持 ROW_NUMBER()
的版本(SQL Server 2005 及更高版本),建议使用该函数,也是最有效的方法。
以上是如何在不使用 ROW_NUMBER() 的情况下模拟 Microsoft SQL Server 2000 中的 LIMIT 子句?的详细内容。更多信息请关注PHP中文网其他相关文章!