通用存储过程分页---(测试能用的请放心试用)
生活随笔
收集整理的這篇文章主要介紹了
通用存储过程分页---(测试能用的请放心试用)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參數:分頁大小,第幾頁,需要得到的字段 ,需要查詢的表 , 查詢條件,排序的字段名,排序的類型,主鍵名稱 分頁大小:整數 第幾頁:整數 需要得到的字段:字符串 需要查詢的表:字符串 查詢條件:字符串 排序的字段名:字符串 排序的類型:整形 主鍵名稱:字符串
輸入參數即可查詢,無論是查詢一條記錄還是查詢多條記錄,無論是分頁還是不分頁,無論是需要查詢條件還是不需要查詢條件……,都可使用此通用的存儲過程!!! 通用性相當好!! 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'
自己的測試 如下 測試戶數據庫 表 如下
?第二個分頁存儲過程
???/**//*??
?????函數名稱:?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位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的通用存储过程分页---(测试能用的请放心试用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [翻译]IE8下VML的变化
- 下一篇: 数字人民币是什么意思 会有什么影响