您的位置:首页 > 数据库

sqlserver 2005 中的分页存储过程

2009-07-23 16:19 429 查看
可以排序的存储过程,适用于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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: