SQL Server2000分頁存儲過程
- Create ? PROCEDURE ?[dbo].[GetRecordWithPage]?
- @fieldsType?nvarchar(1000),??? --字段列表(帶類型),用于@t表變量的字段聲明,如:PhotoID?int,UserID?int,PhotoTitle?nvarchar(50) ?
- @fieldsList?nvarchar(500),???? --字段列表(不帶類型),用于分頁部分讀取@t表變量的字段,也可使用*代替,但性能會下降,如:PhotoID?,UserID?,PhotoTitle ?
- @selectSrting?nvarchar(2000),? --向@t表變量中讀取記錄的Select語句 ?
- @resultOrderBy?nvarchar(200),? --對分頁結果進行排序的字段,如:升序'PhotoID?ASC'、降序'PhotoID?DESC',注意:如果是降序的話要在selectSrting和此處都加DESC ?
- @pageSize? INT ,???????????????? --頁尺寸,0表示返回所有行 ?
- @currentPage? INT ,????????????? --當前頁,首頁為1 ?
- @RecordCount? INT ? OUTPUT ??????? --非0值則返回記錄總數 ?
- AS ?
- BEGIN ?
- ???? DECLARE ?@strSql? varchar (4000)?
- ???? declare ?@sql?nvarchar(1000)?
- ???? SET ?@strSql?=? 'DECLARE?@t?TABLE(' ?+@fieldsType+? ');' ?
- ???? SET ?@strSql?=?@strSql?+? 'INSERT?INTO?@t?' +@selectSrting+? ';' ?
- ???? set ?@sql?=?@strSql?+? 'select?@aa=count(*)?from?@t;' ??
- ???? exec ?sp_executesql?@sql,N '@aa?int?output' ,@RecordCount? OUTPUT ;?
- ????IF?@pageSize=0?
- ???????? SET ?@strSql=@strSql+ 'SELECT?' +@fieldsList+ '?FROM?@t;' ?
- ???? ELSE ?
- ????????IF?@currentPage=1?
- ???????????? SET ?@strSql=@strSql+ 'select?TOP(' +STR(@pageSize)+ ')' +@fieldsList+ '?FROM?@t;' ?
- ???????? ELSE ?
- ???????????? BEGIN ?
- ???????????????? SET ?@strSql?=@strSql+ 'SELECT?TOP(' +Str(@pageSize)+ ')' +?@fieldsList+ 'FROM?(SELECT?TOP(' +Str(@pageSize?*?@currentPage)+ ')' +@fieldsList+ '?,?ROW_NUMBER()?OVER?(ORDER?BY?' +@resultOrderBy+ ')' ?
- ???????????????? SET ?@strSql?=@strSql+ '?AS?RowNumber?FROM?@t' ?
- ???????????????? SET ?@strSql?=@strSql+ ')?AS?r?WHERE?r.RowNumber?>' ?+?Str(@pageSize?*?(@currentPage?-?1))+ ';' ?
- ???????????? END ?
- ???? EXEC (@strSql)?
- END
==================================================================
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
