一个分页存储过程

本文介绍了一个SQL Server中用于实现分页查询的存储过程,该过程可以根据指定的表名、每页显示记录数、当前页数等参数,返回所需的数据记录及总记录数。

人家的,感觉不错,

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[PaginationDisplay]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[PaginationDisplay]
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

 

/*
按页得到信息,得到记录总条数
*/
CREATE procedure PaginationDisplay
(
@TBName     nvarchar(2000)='',     --表名,默认为空
@PageSize   int=10,               --每页记录数,默认为10
@CurPage    int=1,                --当前页,默认第1页
@KeyField   nvarchar(100)='ID',   --@TBName表的关键字段名,默认为ID
@KeyAscDesc nvarchar(4)='ASC' ,   --关键字段的升、降序,默认为升序
@Fields     nvarchar(500)='*',    --所选择的列名,默认为全选
@Condition  nvarchar(200)='' ,    --where条件,默认为空
@Order      nvarchar(200)=''      --排序条件,默认为空

)
as

if @TBName=''
   begin
 raiserror('请指定表名!',11,1)
   return
   end
if @PageSize<=0 or @CurPage<=0
   begin
 raiserror('每页记录数和当前页数都必须大于0!',11,1)
 return
   end
if @KeyAscDesc='DESC'
   set @KeyAscDesc='<'
else
   set @KeyAscDesc='>'
if @Condition <> ''
   set @Condition=' where '+@Condition

declare @SQL nvarchar(4000)

set @SQL=''
set @SQL='select count(*) from '+@TBName+@Condition+''

select @SQL = 'declare @int int ;select @int = (' +@SQL +');'
select @SQL = @SQL+' declare @page int; if @int%'+convert(nvarchar(50),@PageSize)+' = 0 select @page = @int/'+convert(nvarchar(50),@PageSize)+' else select @page = @int/'+convert(nvarchar(50),@PageSize)+'+1;select @page'

execute sp_executesql @SQL

set @SQL=''

if @CurPage=1
   begin 
             set @SQL=@SQL+'select top '+cast(@PageSize as nvarchar(20))+' '+@Fields+' from '+@TBName+@Condition+' '+@Order
            
   end
else
   begin       
 set @SQL=@SQL + 'declare @sLastValue nvarchar(100)' + char(13) 
 set @SQL=@SQL+'select top '+cast((@PageSize * (@CurPage - 1)) as nvarchar(20))+' @sLastValue='+@KeyField+' from '+@TBName+@Condition+' '+@Order+char(13)
 
 declare @Condition2 nvarchar(200)
 if @Condition=''
  set @Condition2=' where '+@KeyField+@KeyAscDesc+'@sLastValue '
 else
     set @Condition2=' and '+@KeyField+@KeyAscDesc+'@sLastValue '

 set @SQL=@SQL+'select top '+cast(@PageSize as nvarchar(20))+' '+@Fields+ ' from '+@TBName+@Condition+@Condition2+@Order
   end
execute sp_executesql @SQL


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


 

本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

转载于:https://www.cnblogs.com/zjypp/archive/2007/04/29/2319507.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值