您好,欢迎访问一九零五行业门户网

sql2000/2005中高效分页存储过程实例

文章有二个实例一个是sql2000的分页存储过程一个是sql2005的分页存储过程,有需要的同学可以拿去看看。
 代码如下 复制代码
create procedure [dbo].[proccustompage]
    (
     @table_name varchar(5000),    --表名
     @sign_record varchar(50),     --主键
     @filter_condition varchar(1000),    --筛选条件,不带where
     @page_size int,     --页大小
     @page_index int,       --页索引      
   @taxisfield varchar(1000), --排序字段
     @taxis_sign int,     --排序方式 1为 desc, 0为 asc
@find_recordlist varchar(1000),   --查找的字段
     @record_count int     --总记录数
     )
     as
      begin
      declare @start_number int
      declare @end_number int
      declare @topn_number int
     declare @ssql varchar(8000)
if(@find_recordlist='')
begin
select @find_recordlist='*'
end
     select @start_number =(@page_index-1) * @page_size
      if @start_number     select @start_number=0
      select @end_number=@start_number+@page_size
      if @end_number>@record_count
     select @end_number=@record_count
     select @topn_number=@end_number-@start_number
     if @topn_number     select @topn_number=0
      print @topn_number
     print @start_number
     print @end_number
     print @record_count
if @taxisfield=''
begin
@taxisfield=@sign_record
end
     if @taxis_sign=0
       begin
         if @filter_condition=''
         begin
           select @ssql='select '+@find_recordlist+' from '+@table_name+'
           where '+@sign_record+' in (select top '+cast(@topn_number as varchar(10))+' '+@sign_record+' from '+@table_name+'
            where '+@sign_record+' in (select top '+cast(@end_number as varchar(10))+' '+@sign_record+' from '+@table_name+'
          order by '+@taxisfield+') order by '+@taxisfield+' desc)order by '+@taxisfield
         end
        else
        begin
        select @ssql='select '+@find_recordlist+' from '+@table_name+'
     where '+@sign_record+' in (select top '+cast(@topn_number as varchar(10))+' '+@sign_record+' from '+@table_name+'
     where '+@sign_record+' in (select top '+cast(@end_number as varchar(10))+' '+@sign_record+' from '+@table_name+'
     where '+@filter_condition+' order by '+@taxisfield+') and '+@filter_condition+' order by '+@taxisfield+' desc) and '+@filter_condition+' order by '+@taxisfield
         end
      end
    else
      begin
      if @filter_condition=''
        begin
          select @ssql='select '+@find_recordlist+' from '+@table_name+'
     where '+@sign_record+' in (select top '+cast(@topn_number as varchar(10))+' '+@sign_record+' from '+@table_name+'
     where '+@sign_record+' in (select top '+cast(@end_number as varchar(10))+' '+@sign_record+' from '+@table_name+'
     order by '+@taxisfield+' desc) order by '+@taxisfield+')order by '+@taxisfield+' desc'
     end
      else
      begin
        select @ssql='select '+@find_recordlist+' from '+@table_name+'
     where '+@sign_record+' in (select top '+cast(@topn_number as varchar(10))+' '+@sign_record+' from '+@table_name+'
     where '+@sign_record+' in (select top '+cast(@end_number as varchar(10))+' '+@sign_record+' from '+@table_name+'
     where '+@filter_condition+' order by '+@taxisfield+' desc) and '+@filter_condition+' order by '+@taxisfield+') and '+@filter_condition+' order by '+@taxisfield+' desc'
     end
      end
      exec (@ssql)
      if @@error0
      return -3
     return 0
     end
print @ssql
go
sql2005
 代码如下 复制代码
create procedure [dbo].[getrecordfrompage]
@selectlist varchar(2000), --欲选择字段列表
@tablesource varchar(100), --表名或视图表
@searchcondition varchar(2000), --查询条件
@orderexpression varchar(1000), --排序表达式
@pageindex int = 1, --页号,从0开始
@pagesize int = 10 --页尺寸
as
begin
if @selectlist is null or ltrim(rtrim(@selectlist)) = ''
begin
set @selectlist = '*'
end
print @selectlist
set @searchcondition = isnull(@searchcondition,'')
set @searchcondition = ltrim(rtrim(@searchcondition))
if @searchcondition ''
begin
if upper(substring(@searchcondition,1,5)) 'where'
begin
set @searchcondition = 'where ' + @searchcondition
end
end
print @searchcondition
set @orderexpression = isnull(@orderexpression,'')
set @orderexpression = ltrim(rtrim(@orderexpression))
if @orderexpression ''
begin
if upper(substring(@orderexpression,1,5)) 'where'
begin
set @orderexpression = 'order by ' + @orderexpression
end
end
print @orderexpression
if @pageindex is null or @pageindex begin
set @pageindex = 1
end
print @pageindex
if @pagesize is null or @pagesize begin
set @pagesize = 10
end
print @pagesize
declare @sqlquery varchar(4000)
set @sqlquery='select '+@selectlist+',rownumber
from
(select ' + @selectlist + ',row_number() over( '+ @orderexpression +') as rownumber
from '+@tablesource+' '+ @searchcondition +') as rownumbertablesource
where rownumber between ' + cast(((@pageindex - 1)* @pagesize+1) as varchar)
+ ' and ' +
cast((@pageindex * @pagesize) as varchar)
-- order by ' + @orderexpression
print @sqlquery
set nocount on
execute(@sqlquery)
set nocount off
return @@rowcount
end
其它类似信息

推荐信息