支持任意排序的分页存储过程
生活随笔
收集整理的這篇文章主要介紹了
支持任意排序的分页存储过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
????? 從網上找了一個分頁存儲過程,在使用的過程中出現對非主鍵排序查詢時,查不到數據,根據sql2005
的特點修改了其bug,已經添加性能測試(2008-10-27)。?
?
存儲過程IF?OBJECT_ID(N'[dbo].[pro_GetRecordByPageOrder1]')?IS?NOT?NULL?
????DROP?PROCEDURE?[dbo].[pro_GetRecordByPageOrder1]?
go?
------------------------------------?
--用途:支持任意排序的分頁存儲過程??
--說明:?
------------------------------------?
create?PROCEDURE?pro_GetRecordByPageOrder1?
(?
????@tblName?varchar(255),???--?表名?
????@fldName?varchar(255)='*',???--?顯示字段名?
????@OrderfldName?varchar(255),??--?排序字段名?
????@PageSize?int?=?10,???--?頁尺寸?
????@PageIndex?int?=?1,???--?頁碼?
????@IsReCount?bit?=?0,???--?返回記錄總數,?非?0?值則返回?
????@OrderType?bit?=?0,???--?設置排序類型,?非?0?值則降序?
????@strWhere?varchar(1000)?=?''??--?查詢條件?(注意:?不要加?where)?
)?
--with?encryption?
AS?
begin?
declare?@strSQL?varchar(6000)??--?主語句?
declare?@strSQL1?varchar(2000)??--?主語句?
declare?@strTmp?varchar(100)???--?臨時變量?
declare?@strOrder?varchar(400)??--?排序類型?
set?@strTmp?=?'?where??rownum?>'+str((@PageIndex-1)*@PageSize)?
if?@OrderType?!=?0?
begin?
??set?@strOrder?=?'?order?by?['?+?@OrderfldName?+']?desc'?
end?
else?
begin?
??set?@strOrder?=?'?order?by?['?+?@OrderfldName?+']?asc'?
end?
set?@strSQL?='?select?top?'?+?str(@PageIndex*@PageSize)?
+?'??*,?ROW_NUMBER()?OVER('+@strOrder+')?AS?rownum?from?['?+?@tblName?+?']?'?;?
if?@strWhere?!=?''?
????set?@strSQL?=?@strSQL+?'?where?'+?@strWhere?;?
if?@PageIndex?=?1?
begin???
??set?@strSQL?='??select?top?'?+?str(@PageSize)?+?'?'?+?@fldName?
+?'?from??'+@tblName??+'?'?
????if?@strWhere?!=?''?
????????set?@strSQL?=?@strSQL?+?'?where?'+@strWhere?+'?'+@strOrder?
????else?
????????set?@strSQL?=?@strSQL?+'?'+@strOrder?
end?
else?
????begin?
????????set?@strSQL?='?select?'??+?@fldName?+?'?from?(?'+@strSQL+'?)?as?tmp1?'+@strTmp;?
????end?
if?@IsReCount?!=?0?
begin?
????set?@strSQL?=?@strSQL+'?select?count(1)?as?Total?from??['+@tblName??+']?'?
????if?@strWhere?!=?''?
????????set?@strSQL?=?@strSQL+'?where?'+@strWhere?
end?
print?@strsql?
exec(?@strSQL)?
end?
go?
--endregion?
?
關于存儲過程的性能(這個主要看你對查詢的索引建立是否合理):
?
有回復說在字段值完全相同的情況下,要出錯的問題,我已經作了測試,是完全能正常執行的(2008-12-09)。
轉載于:https://www.cnblogs.com/LifelongLearning/archive/2008/10/23/1317840.html
總結
以上是生活随笔為你收集整理的支持任意排序的分页存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [原创 URL重写步骤
- 下一篇: 滚动条颜色样式设置 说明