为什么所有数据库都没有内置原生的分页函数?

本贴最后更新于 3142 天前,其中的信息可能已经斗转星移

SqlServer 的分页简直是个灾难


StringBuilder sb = new StringBuilder("select top " + _PagerControl.PageSize);
sb.Append(" " + _TableColumns);
sb.Append(" from " + _TableName);
sb.Append(" where " + where);
sb.Append(" and " + _TableKey + " not in");
sb.Append(" (");
sb.Append("select top " + (_PagerControl.StartRecordIndex - 1));
sb.Append(" " + _TableKey);
sb.Append(" from " + _TableName);
sb.Append(" where " + where);
sb.Append(" order by " + _TableOrder);
sb.Append(")");
sb.Append(" order by " + _TableOrder);

极其繁琐

如果某个表没有主键,直接就懵逼了。


Oracle 还比较人性化

select * from table where RowId>1000 and RowId <2000


在我看来,数据库应该提供原生的分页方案,但是好像没有数据库做了这种支持,这种局面是什么原因造成的呢?

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 88250

    [SQLServer] 这个看上去果然很反人类,分页支持不好应该是因为 [SQL] 规范里面没有定义这个语法,难道是当时设计规范的时候没考虑到么..

  • mainlove

    所谓分页 就是取到 第 n 到 m 条数据。。。

    不提供函数也还是可以有办法搞的

  • LyZane
    作者

    @88250 我的疑惑就在于,这么多年过去了,为什么依然没有出现这样的东西呢?

  • 88250

    木已成舟,没必要改进了,改了很多框架也要改,好麻烦。

  • 714593351

    因为太简单?数据库都提供了变相解决这个问题的方式,所以就不再单独提供这样的函数了?

  • wishao

    mysql 也有 limit 啊

请输入回帖内容 ...