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...