sqlserver 2005 中的分页存储过程

可以排序的存储过程,适用于sqlserver2005 ,sqlserver2008。。

写的很匆忙。。。还有很多地方可以优化。。。。

Create PROCEDURE [dbo].[pagination]
    -- Add the parameters for the stored procedure here
    @TableName     nvarchar(200),        ----要显示的表或多个表的连接
    @FieldName     nvarchar(500) = '*',    ----要显示的字段列表
    @FieldSort     nvarchar(200) = '',    ----排序字段列表或条件
    @PageSize      INT = 10,        ----每页显示的记录个数
    @PageIndex     INT = 1,        ----要显示那一页的记录
    //@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
    @OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
    @Condition varchar(1500)=''       -- 查询条件(注意: 不要加where)
AS

declare @strSQL varchar(5000) -- 主语句
declare @rowstart varchar(50) -- 主语句
declare @rowend varchar(50) -- 主语句

BEGIN
set @rowstart = str(@pageSize*(@pageIndex-1))
set @rowend = str(@pageSize*@pageIndex)

if @FieldSort !=''
  if @OrderType =0
    if @Condition !=''
       set @strSQL='SELECT * FROM (select *,ROW_NUMBER() Over(order by '+@FieldSort+' asc,ID desc) as rowNum from '+@TableName+ ' where ' + @Condition+')'
    else
       set @strSQL='SELECT * FROM (select *,ROW_NUMBER() Over(order by '+@FieldSort+' asc,ID desc) as rowNum from '+@TableName+')'
  else
    if @Condition !=''
       set @strSQL='SELECT * FROM (select *,ROW_NUMBER() Over(order by '+@FieldSort+' desc,ID desc) as rowNum from '+@TableName+ ' where '+@Condition+')'
    else
       set @strSQL='SELECT * FROM (select *,ROW_NUMBER() Over(order by '+@FieldSort+' desc,ID desc) as rowNum from '+@TableName+')'
else
  if @Condition!=''
     set @strSQL='SELECT * FROM (select *,ROW_NUMBER() Over(order by ID) as rowNum from '+@TableName +' where '+@Condition +')'
  else
     set @strSQL='SELECT * FROM (select *,ROW_NUMBER() Over(order by ID) as rowNum from '+@TableName+')'

set @strSQL=@strSQL + ' QueryTable where rowNum between '+@rowstart+' and '+ @rowend
exec (@strSQL)
END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值