2009-11-03 59 views
2

我有一個複雜的SP,其適用於多種連接和查找,來像逗號分隔值等複雜的過濾器......在它的上面,我已經部署兩個複雜但性能高的特點:合併:使用SET ROWCOUNT或RowNumber()的SQL 2005+動態分頁?

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]使用「ROWNUMBER()」 2005的SQL的功能,然後將過濾器:(我在過去使用它)

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,會發生什麼情況。我希望'SET ROWCOUNT'不會在同時SP呼叫中'共享'或'覆蓋'。請確認。 其他比較點2.1 & 2.2?

+1

如果你仍然在附近,你的文章的後半部分應該是作爲回答發佈的,而不是問題的主體 – 2012-06-19 16:37:18

+0

謝謝,但我真的很想找一些關於此問題的專家意見。這就是我發佈我的綜合研發的原因。 – 2012-06-21 07:46:31

回答

0

我認爲這兩種方法都好,我們可以選擇去有什麼最適合我們的要求


我知道兩種方法哪一套我的表現\複雜的權衡 -

[ 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,會發生什麼情況。我希望'SET ROWCOUNT'不會在同時SP呼叫中'共享'或'覆蓋'。請確認。 其他比較點2.1 & 2.2?