create proc sp_pageview@tbname sysname, --要分頁顯示的表名
@fieldkey nvarchar(1000), --用於定位記錄的主鍵(惟一鍵)字段,可以是逗號分隔的多個字段
@pagecurrent int=1, --要顯示的頁碼
@pagesize int=10, --每頁的大小(記錄數)
@fieldshow nvarchar(1000)='', --以逗號分隔的要顯示的字段列表,如果不指定,則顯示所有字段
@fieldorder nvarchar(1000)='', --以逗號分隔的排序字段列表,可以指定在字段後面指定desc/asc用於指定排序順序
@where nvarchar(1000)='', --查詢條件
@pagecount int output --總頁數
asset nocount on
--檢查物件是否有效
if object_id(@tbname) is null
begin
raiserror(n'物件"%s"不存在',1,16,@tbname)
return
endif objectproperty(object_id(@tbname),n'istable')=0
and objectproperty(object_id(@tbname),n'isview')=0
and objectproperty(object_id(@tbname),n'istablefunction')=0
begin
raiserror(n'"%s"不是表、檢視或者錶值函式',1,16,@tbname)
return
end--分頁字段檢查
if isnull(@fieldkey,n'')=''
begin
raiserror(n'分頁處理需要主鍵(或者惟一鍵)',1,16)
return
end--其他引數檢查及規範
if isnull(@pagecurrent,0)<1 set @pagecurrent=1
if isnull(@pagesize,0)<1 set @pagesize=10
if isnull(@fieldshow,n'')=n'' set @fieldshow=n'*'
if isnull(@fieldorder,n'')=n''
set @fieldorder=n''
else
set @fieldorder=n'order by '+ltrim(@fieldorder)
if isnull(@where,n'')=n''
set @where=n''
else
set @where=n'where ('+@where+n')'
--如果@pagecount為null值,則計算總頁數(這樣設計可以只在第一次計算總頁數,以後呼叫時,把總頁數傳回給儲存過程,避免再次計算總頁數,對於不想計算總頁數的處理而言,可以給@pagecount賦值)
if @pagecount is null
begin
declare @sql nvarchar(4000)
set @sql=n'select @pagecount=count(*)'
+n' from '+@tbname
+n' '+@where
exec sp_executesql @sql,n'@pagecount int output',@pagecount output
set @pagecount=(@pagecount+@pagesize-1)/@pagesize
end--計算分頁顯示的topn值
declare @topn varchar(20),@topn1 varchar(20)
select @topn=@pagesize,
@topn1=@pagecurrent*@pagesize
--第一頁直接顯示
if @pagecurrent=1
exec(n'select top '+@topn
+n' '+@fieldshow
+n' from '+@tbname
+n' '+@where
+n' '+@fieldorder)
else
begin
--生成主鍵(惟一鍵)處理條件
declare @where1 nvarchar(4000),@s nvarchar(1000)
select @where1=n'',@s=@fieldkey
while charindex(n',',@s)>0
select @s=stuff(@s,1,charindex(n',',@s),n''),
@where1=@where1
+n' and a.'+left(@s,charindex(n',',@s)-1)
+n'='+left(@s,charindex(n',',@s)-1)
select @where1=stuff(@where1+n' and a.'+@s+n'='+@s,1,5,n''),
@topn=@topn1-@pagesize
--執行查詢
exec(n'set rowcount '+@topn1
+n' select '+@fieldkey
+n' into # from '+@tbname
+n' '+@where
+n' '+@fieldorder
+n' set rowcount '+@topn
+n' delete from #'
+n' select '+@fieldshow
+n' from '+@tbname
+n' a where exists(select * from # where '+@where1
+n') '+@fieldorder)
end
分頁儲存過程 分頁儲存過程
分頁儲存過程 alter proc dbo p pageshow pagesize int,每頁大小 currentpage int out,當前頁 housename nvarchar 50 房產名稱 totalcount int out,總記錄數 totalpage int out 總頁數 as...
分頁儲存過程
create proc p sobigo percentpage tblname varchar 255 t category 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pag...
分頁儲存過程
create procedure pro select pageindex int,pagesize int as select student.sno,student.sname,student.s grade.math,grade.physics,grade.huaxue,grade.chine...