【发布时间】: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