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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

通用存储过程分页---(测试能用的请放心试用)

發布時間:2025/4/5 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通用存储过程分页---(测试能用的请放心试用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參數:分頁大小,第幾頁,需要得到的字段 ,需要查詢的表 , 查詢條件,排序的字段名,排序的類型,主鍵名稱 分頁大小:整數 第幾頁:整數 需要得到的字段:字符串 需要查詢的表:字符串 查詢條件:字符串 排序的字段名:字符串 排序的類型:整形 主鍵名稱:字符串
輸入參數即可查詢,無論是查詢一條記錄還是查詢多條記錄,無論是分頁還是不分頁,無論是需要查詢條件還是不需要查詢條件……,都可使用此通用的存儲過程!!! 通用性相當好!! SQL Code
USE?zxzb
GO
IF?EXISTS(SELECT?
*?FROM?sys.objects?WHERE?NAME='cndoup_GetPageOfRecords')
??DROP?PROCEDURE?cndoup_GetPageOfRecords
GO
--創建存儲過程
CREATE?PROCEDURE?cndoup_GetPageOfRecords
??@pageSize?
int?=?20,????????????????????????????????????????????????--分頁大小
??@currentPage?
int?,?????????????????????????????????????????????????--第幾頁
??@columns?varchar(
1000)?=?'*',????????????????????????????--需要得到的字段?
??@tableName?varchar(
100),?????????????????????????????????????--需要查詢的表????
??@condition?varchar(
1000)?=?'',?????????????????????????--查詢條件,?不用加where關鍵字
??@ascColumn?varchar(
100)?=?'',????????????????????????????--排序的字段名?(即?order?by?column?asc/desc)
??@bitOrderType?
int?=?0,?????????????????????????????????????????--排序的類型?(0為升序,1為降序)
??@pkColumn?varchar(
50)?=?''?????????????????????????????????--主鍵名稱

AS
BEGIN????????????????????????????????????????????????????????????????????????????????????
--存儲過程開始
??DECLARE?@strTemp?varchar(
300)
??DECLARE?@strSql?varchar(
5000)????????????????????????????--該存儲過程最后執行的語句
??DECLARE?@strOrderType?varchar(
1000)????????????????--排序類型語句?(order?by?column?asc或者order?by?column?desc)

??BEGIN
????IF?@bitOrderType?
=?1????????????????--降序
??????BEGIN
????????SET?@strOrderType?
=?'?ORDER?BY?'+@ascColumn+'?DESC'
????????SET?@strTemp?
=?'<(SELECT?min'
??????END
????ELSE??????????????????
--升序
??????BEGIN
????????SET?@strOrderType?
=?'?ORDER?BY?'+@ascColumn+'?ASC'
????????SET?@strTemp?
=?'>(SELECT?max'
??????END

????IF?@currentPage?
=?1????????????--第一頁
??????BEGIN
????????IF?@condition?
!=?''
??????????SET?@strSql?
=?'SELECT?TOP?'+STR(@pageSize)+'?'+@columns+'?FROM?'+@tableName+
????????????
'?WHERE?'+@condition+@strOrderType
????????ELSE
??????????SET?@strSql?
=?'SELECT?TOP?'+STR(@pageSize)+'?'+@columns+'?FROM?'+@tableName+@strOrderType
??????END

????ELSE??????????????????
--?其他頁
??????BEGIN
????????IF?@condition?
!=''
??????????SET?@strSql?
=?'SELECT?TOP?'+STR(@pageSize)+'?'+@columns+'?FROM?'+@tableName+
??????????
'?WHERE?'+@condition+'?AND?'+@pkColumn+@strTemp+'('+@pkColumn+')'+'?FROM?(SELECT?TOP?'+STR((@currentPage-1)*@pageSize)+
??????????
'?'+@pkColumn+'?FROM?'+@tableName+'?where'+@condition+@strOrderType+')?AS?TabTemp)'+@strOrderType
????????ELSE
??????????SET?@strSql?
=?'SELECT?TOP?'+STR(@pageSize)+'?'+@columns+'?FROM?'+@tableName+
??????????
'?WHERE?'+@pkColumn+@strTemp+'('+@pkColumn+')'+'?FROM?(SELECT?TOP?'+STR((@currentPage-1)*@pageSize)+'?'+@pkColumn+
??????????
'?FROM?'+@tableName+@strOrderType+')?AS?TabTemp)'+@strOrderType
??????END

??END
??EXEC?(@strSql)
--print?@strSql
END


exec?cndoup_GetPageOfRecords?
5,1,'ap_id,ap_title,ap_addtime','tb_ArtPaper','','ap_id',1,'ap_id'

自己的測試 如下 測試戶數據庫 表 如下

?第二個分頁存儲過程

Code
???/**//*??
?????函數名稱:?GetRecordFromPage??
?????函數功能:?獲取指定頁的數據??
?????參數說明:?@tblName??????包含數據的表名??
??????????????@fldName??????關鍵字段名??
??????????????@PageSize?????每頁記錄數??
??????????????@PageIndex????要獲取的頁碼??
??????????????@OrderType????排序類型,?0?-?升序,?1?-?降序??
??????????????@strWhere?????查詢條件?(注意:?不要加?where)??
?????作  者:?鐵拳??
?????郵  箱:?sunjianhua_kki@sina.com??
?????創建時間:?2004-07-04??
?????修改時間:?2004-07-04??
???
*/
??
??CREATE?PROCEDURE?GetRecordFromPage??
???????@tblName??????varchar(
255),???????--?表名??
???????@fldName??????varchar(
255),???????--?字段名??
???????@PageSize?????
int?=?10,???????????--?頁尺寸??
???????@PageIndex????
int?=?1,????????????--?頁碼??
???????@OrderType????bit?
=?0,????????????--?設置排序類型,?非?0?值則降序??
???????@strWhere?????varchar(
2000)?=?''??--?查詢條件?(注意:?不要加?where)??
???AS??
?????
???declare?@strSQL???varchar(
6000)???????--?主語句??
???declare?@strTmp???varchar(
1000)???????--?臨時變量??
???declare?@strOrder?varchar(
500)????????--?排序類型??
?????
???
if?@OrderType?!=?0??
???begin??
???????
set?@strTmp?=?'<(select?min'??
???????
set?@strOrder?=?'?order?by?['?+?@fldName?+?']?desc'??
???end??
???
else??
???begin??
???????
set?@strTmp?=?'>(select?max'??
???????
set?@strOrder?=?'?order?by?['?+?@fldName?+']?asc'??
???end??
?????
???
set?@strSQL?=?'select?top?'?+?str(@PageSize)?+?'?*?from?['??
???????
+?@tblName?+?']?where?['?+?@fldName?+?']'?+?@strTmp?+?'(['??
???????
+?@fldName?+?'])?from?(select?top?'?+?str((@PageIndex-1)*@PageSize)?+?'?['??
???????
+?@fldName?+?']?from?['?+?@tblName?+?']'?+?@strOrder?+?')?as?tblTmp)'??
???????
+?@strOrder??
?????
???
if?@strWhere?!=?''??
???????
set?@strSQL?=?'select?top?'?+?str(@PageSize)?+?'?*?from?['??
???????????
+?@tblName?+?']?where?['?+?@fldName?+?']'?+?@strTmp?+?'(['??
???????????
+?@fldName?+?'])?from?(select?top?'?+?str((@PageIndex-1)*@PageSize)?+?'?['??
???????????
+?@fldName?+?']?from?['?+?@tblName?+?']?where?'?+?@strWhere?+?'?'??
???????????
+?@strOrder?+?')?as?tblTmp)?and?'?+?@strWhere?+?'?'?+?@strOrder??
?????
???
if?@PageIndex?=?1??
???begin??
???????
set?@strTmp?=?''??
???????
if?@strWhere?!=?''??
???????????
set?@strTmp?=?'?where?('?+?@strWhere?+?')'??
?????
???????
set?@strSQL?=?'select?top?'?+?str(@PageSize)?+?'?*?from?['??
???????????
+?@tblName?+?']'?+?@strTmp?+?'?'?+?@strOrder??
???end??
?????
???exec?(@strSQL)??
?????
???GO

exec?GetRecordFromPage?
'tbTest','T_ID',20,80000,true,'1=1'

?

?兩個測試效果如下

?測試的數據庫為2768000 數據其結果差不多兩個都經過測試能用

轉載于:https://www.cnblogs.com/yinyao/archive/2009/10/22/1588025.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的通用存储过程分页---(测试能用的请放心试用)的全部內容,希望文章能夠幫你解決所遇到的問題。

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