您的位置:首页 > 其它

数据分页存储过程

2015-04-01 09:37 369 查看
CREATE PROCEDURE [dbo].[pro_publicPageList]

(

 @TableName varchar(4000),            --表名200

 @ReFieldsStr varchar(4000) = '*',   --字段名(全部字段为*)200

 @OrderString varchar(4000),         --排序字段(必须!支持多字段不用加order by)200

 @WhereString varchar(4000) =N'',  --条件语句(不用加where)500

 @PageSize int,                     --每页多少条记录

 @PageIndex int = 1 ,               --指定当前为第几页

 @TotalRecord int output            --返回总记录数

)

AS

 

BEGIN    

    --处理开始点和结束点

    Declare @StartRecord int;

    Declare @EndRecord int;

    Declare @TotalCountSql nvarchar(4000);

    Declare @SqlString nvarchar(2000);    

    set @StartRecord = (@PageIndex-1)*@PageSize + 1

    set @EndRecord = @StartRecord + @PageSize - 1

    SET @TotalCountSql= N'select @TotalRecord = count(*) from ' + @TableName;--总记录数语句

    SET @SqlString = N'(select row_number() over (order by '+ @OrderString +') as rowId,'+@ReFieldsStr+' from '+ @TableName;

--查询语句

    --

    IF (@WhereString! = '' or @WhereString!=null)

        BEGIN

            SET @TotalCountSql=@TotalCountSql + '  where '+ @WhereString;

            SET @SqlString =@SqlString+ '  where '+ @WhereString;            

        END

    --第一次执行得到

    --IF(@TotalRecord is null)

       --BEGIN

           EXEC sp_executesql @totalCountSql,N'@TotalRecord int out',@TotalRecord output;--返回总记录数

      --END

    --执行主语句

    set @SqlString ='select * from ' + @SqlString + ') as t where rowId between ' + ltrim(str(@StartRecord)) + ' and ' +  

ltrim(str(@EndRecord));

    Exec(@SqlString)    

END

GO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: