分頁儲存過程 單錶Sql2005

2021-04-30 09:12:45 字數 3789 閱讀 1704

alter procedure [dbo].[sp_bj_page]

@currentpage int,

@pagesize int,

@field_info varchar(500),

@table_info varchar(1000),

@field_id varchar(10),    --

@field_order varchar(100),--

@otherwhere varchar(50),

@recordcount int output,

@pagecount int output  

asbegin

set nocount on;

declare @minpage int

declare @maxpage int

declare @sql varchar(1000)

declare @sqlt nvarchar(300)

declare @sqlt1 nvarchar(300)

if @otherwhere='' or @otherwhere is null

begin

set @sqlt = 'select @recordcount = count(' + @field_id + ') from ' + @table_info

endelse

begin

set @sqlt = 'select @recordcount = count(' + @field_id + ') from ' + @table_info + ' where '+ @otherwhere

end--set @sqlt = 'select @recordcount = count(' + @field_id + ') from ' + @table_info

exec sp_executesql @sqlt,n'@recordcount int output',@recordcount output       

--如何將exec執行結果放入變數中,如果是字串就要用n,n後面的變數一定要和@sqlt裡面的變數同名  

print 'recordcount'+convert(nvarchar,@recordcount)

declare @rownumber int

set @rownumber=0

if @otherwhere='' or @otherwhere is null

begin

set @sqlt1 = 'select top 1 @rownumber=cast(rownumber as int) 

from (select * , row_number() over(order by syopid) as rownumber from ' + @table_info + ' ) as a '

endelse

begin

set @sqlt1 = 'select top 1 @rownumber=cast(rownumber as int) 

from (select * , row_number() over(order by syopid) as rownumber from ' + @table_info + ' ) as a ' +

+' where '+ @otherwhere 

endexec sp_executesql @sqlt1,n'@rownumber int output',@rownumber output

print @rownumber

if @rownumber = 0

begin

return 0

endif @pagesize <= 0  

begin  

set @pagesize = 10

end  

else if @pagesize > @recordcount

begin  

set @pagesize = @recordcount

end  

print 'pagesize' + convert(nvarchar,@pagesize)

set @pagecount = @recordcount / @pagesize  

if ((@recordcount % @pagesize) != 0)                    --如果除不淨則加一頁

begin

set @pagecount = @recordcount / @pagesize

set @pagecount = @pagecount + 1

end  

else 

begin  

set @pagecount = @recordcount /@pagesize

end  

print 'pagecount' + convert(nvarchar,@pagecount)

if @currentpage <= 0 

begin  

set @currentpage = 1

end  

else if @currentpage > @pagecount

begin         

set @currentpage = @pagecount       --如果輸入頁數大於總頁數則符最後一頁

end  

print 'currentpage' + convert(nvarchar,@currentpage)

set @minpage = (@currentpage - 1) * @pagesize + 1 + @rownumber -1  

set @maxpage = @minpage + @pagesize - 1    

print 'maxpage' + convert(nvarchar,@maxpage)

begin  

if @field_info like '' 

set @field_info = '*'

if @otherwhere like '' 

begin 

set @sql = 'select ' + @field_info + ' from (select ' +  @field_info +

' , row_number() over(order by ' + @field_order + ') as rownumber from '

+ @table_info + ') as a where rownumber between ' + convert(varchar(10),@minpage)

+ ' and ' + convert(varchar(10),@maxpage) 

end

else

begin 

set @sql = 'select ' + @field_info + ' from (select ' +  @field_info +

' , row_number() over(order by '+ @field_order + ') as rownumber from '

+ @table_info + ') as a where rownumber between '

+ convert(varchar(10),@minpage) + ' and ' + convert(varchar(10),@maxpage)

+ ' and ' + @otherwhere

end 

print (@sql)

exec(@sql)  

end  

end

SQL 2005 儲存過程分頁

create procedure dbo p pagetest sql nvarchar max sql語句不包括排序 curpage int,當前頁 pagerows int,頁面尺寸 order nvarchar 20 排序字段 ordertype nvarchar 10 排序型別倒序desc或...

SQL 2005 多表分頁儲存過程

region 返回所有職位物件 帶分頁 region 返回所有職位物件帶分頁 當前頁 每頁顯示數 返回 頁數 返回總項數 物件集合 public static listgetallmodel int curpage,int size,ref int pagesize,ref int totalsiz...

SQL2005 分頁儲存過程

最近在使用sqlserver2005的資料庫編碼,查到有乙個row number order by 字段 的函式,通過該函式進行分頁非常的方便,請大家看看我寫的分頁儲存過程。分頁儲存過程 create procedure dbo proc testpage 表名 tablename nvarchar...