【问题标题】:Consolidated: SQL 2005+ Dynamic Pagination using SET ROWCOUNT or RowNumber()?合并:使用 SET ROWCOUNT 或 RowNumber() 的 SQL 2005+ 动态分页?
【发布时间】:2010-12-12 16:32:40
【问题描述】:

我有一个复杂的 SP,它应用了多个 JOIN 和查找以及复杂的过滤器,如逗号分隔值等...除此之外,我必须部署两个复杂但性能有效的功能:

1.动态排序,但我认为它是有限的——你知道冗长/笨拙的 CASE 层次结构,奇怪的是专家们也同意这是我们唯一的“最佳”解决方案:

Dynamic Sorting within SQL Stored Procedures http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=5942

不管怎样,我现在对这个不抱太大期望。

2。动态分页 - 也就是说我希望 SP 能够从 Y(Y = 页码)开始只返回 X 条记录(X = 页大小)。我希望你已经大致了解了。

为了更清楚,我想使用 MySQL 和 PostgreSQL 中可用的东西:

[LIMIT { number | ALL }] [OFFSET number]

Database: SQL Pagination? http://www.sql.org/sql-database/postgresql/manual/queries-limit.html

奇怪的是,如此简单和基本的功能在 SQL 2005+ 中不可用......或者我错了(我很高兴听到它:-))


我知道两种适合我的性能\复杂性权衡的方法 -

[2.1] 使用 SQL 2005 的 'RowNumber()' 功能 然后应用过滤器:(我过去使用过)

WHERE (Row BETWEEN (@PageIndex-1) * @PageSize +1 AND @PageIndex* @PageSize)

但同样,这需要创建一个临时表或使用 WITH 子句。这也在: Row Offset in SQL Server

[2.2]我发现了一些新的方法。其中之一是使用

SET ROWCOUNT

http://www.4guysfromrolla.com/webtech/042606-1.shtml

他们说总体 2.2 比 2.1 有效。是吗?另外,我想知道如果两个用户请求同时触发同一个 SP 两次会发生什么。我希望在同时的 SP 调用中“SET ROWCOUNT”不会被“共享”或“覆盖”。请确认。 比较 2.1 和 2.2 的任何其他点?

【问题讨论】:

  • 如果你还在,你帖子的后半部分真的应该作为答案发布,而不是问题的正文
  • 谢谢,但我真的在寻找一些同样的专家。这就是我发布整合研发的原因。

标签: sql-server-2005 pagination row-number rowcount


【解决方案1】:

我相信这两种方法都很好,我们可以选择最适合我们要求的方法


我知道两种适合我的性能\复杂性权衡的方法 -

[2.1] 使用 SQL 2005 的 'RowNumber()' 功能 然后应用过滤器:(我过去使用过)

WHERE (Row BETWEEN (@PageIndex-1) * @PageSize +1 AND @PageIndex* @PageSize)

但同样,这需要创建一个临时表或使用 WITH 子句。这也在: Row Offset in SQL Server

[2.2]我发现了一些新的方法。其中之一是使用

SET ROWCOUNT

http://www.4guysfromrolla.com/webtech/042606-1.shtml

他们说总体 2.2 比 2.1 有效。是吗?另外,我想知道如果两个用户请求同时触发同一个 SP 两次会发生什么。我希望在同时的 SP 调用中,“SET ROWCOUNT”不会被“共享”或“覆盖”。请确认。 比较 2.1 和 2.2 的任何其他点?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多