SQLServer分頁查詢通用儲存過程

2021-06-01 21:18:09 字數 3228 閱讀 2657

自開始做專案以來,一直在用。這段儲存過程的的原創者(sorry,忘記名字了),寫得這段sql**很不錯,我在這個基礎上,按照我的習慣以及思維方式,調整了**,只做分頁查詢用。

create procedure prcpageresult

-- 獲得某一頁的資料 --

@currpage int = 1, --當前頁頁碼 (即top currpage)

@showcolumn varchar(2000) = '*', --需要得到的字段 (即 column1,column2,......)

@tabname varchar(2000), --需要檢視的表名 (即 from table_name)

@strcondition varchar(2000) = '', --查詢條件 (即 where condition......) 不用加where關鍵字

@asccolumn varchar(100) = '', --排序的欄位名 (即 order by column asc/desc)

@bitordertype bit = 0, --排序的型別 (0為公升序,1為降序)

@pkcolumn varchar(50) = '', --主鍵名稱

@pagesize int = 20 --分頁大小

asbegin -- 儲存過程開始

-- 該儲存過程需要用到的幾個變數 --

declare @strtemp varchar(1000)

declare @strsql varchar(4000) --該儲存過程最後執行的語句

declare @strordertype varchar(1000) --排序型別語句 (order by column asc或者order by column desc)

begin

if @bitordertype = 1 -- bitordertype=1即執行降序

begin

set @strordertype = ' order by '+@asccolumn+' desc'

set @strtemp = '<(select min'

endelse

begin

set @strordertype = ' order by '+@asccolumn+' asc'

set @strtemp = '>(select max'

endif @currpage = 1 -- 如果是第一頁

begin

if @strcondition != ''

set @strsql = 'select top '+str(@pagesize)+' '+@showcolumn+' from '+@tabname+

' where '+@strcondition+@strordertype

else

set @strsql = 'select top '+str(@pagesize)+' '+@showcolumn+' from '+@tabname+@strordertype

endelse -- 其他頁

begin

if @strcondition !=''

set @strsql = 'select top '+str(@pagesize)+' '+@showcolumn+' from '+@tabname+

' where '+@strcondition+' and '+@pkcolumn+@strtemp+'('+@pkcolumn+')'+' from (select top '+str((@currpage-1)*@pagesize)+

' '+@pkcolumn+' from '+@tabname+@strordertype+') as tabtemp)'+@strordertype

else

set @strsql = 'select top '+str(@pagesize)+' '+@showcolumn+' from '+@tabname+

' where '+@pkcolumn+@strtemp+'('+@pkcolumn+')'+' from (select top '+str((@currpage-1)*@pagesize)+' '+@pkcolumn+

' from '+@tabname+@strordertype+') as tabtemp)'+@strordertype

endend

exec (@strsql)

end -- 儲存過程結束

go

呼叫方法:

prcpageresult 1,'*','tablename','','createdate',1,'pkid',25
上面表示,查詢表tablename的所有字段,前25條記錄,因為是第一頁,排序欄位為createdate,降序排列,主鍵是pkid。這個儲存過程的功能比較強大,用在專案中非常的適用。不信您可以試試看,尤其是在百萬級資料上,他的優勢就顯露無疑了,當然,這段**是可以轉換成mysql中的儲存過程的,不過,在這裡就不給大家了,你們可以自己試著轉換看看。

下面的儲存過程查詢表的記錄數:

create proc prcrowscount

@tabname varchar(200), --需要查詢的表名

@colname varchar(200)='*', --需要查詢的列名

@condition varchar(200)='' --查詢條件

asbegin

declare @strsql varchar(255)

if @condition = ''

set @strsql='select count('+@colname+') from '+@tabname

else

set @strsql='select count('+@colname+') from '+@tabname+' where '+@condition

exec (@strsql)

end

go

還有刪除記錄的通用儲存過程和查詢單條記錄的通用儲存過程在這裡就不奉送了,感謝提供原通用分頁查詢儲存過程的哥們,謝謝。

通用分頁儲存過程 sqlserver

獲取指定頁的資料 create procedure sppagination tblname varchar 255 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pageinde...

sqlserver 通用分頁儲存過程

示例一create procedure commonpagination columns varchar 500 要顯示的列名,用逗號隔開 tablename varchar 100 要查詢的表名 ordercolumnname varchar 100 排序的列名 order varchar 50 ...

通用分頁儲存過程 sqlserver

獲取指定頁的資料 create procedure sppagination tblname varchar 255 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pageinde...