日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

支持任意排序的分页存储过程

發布時間:2024/6/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 支持任意排序的分页存储过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????? 從網上找了一個分頁存儲過程,在使用的過程中出現對非主鍵排序查詢時,查不到數據,根據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

總結

以上是生活随笔為你收集整理的支持任意排序的分页存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。