当前位置:asp编程网>技术教程>Database教程>  正文

2005分页存储过程通用版

2011-12-06 15:26:57   来源:    作者:佚名   浏览量:2135   收藏
ALTER PROCEDURE [dbo].[sp_Page]
(
    @TableName varchar(50),			--表名
    @FieldsString varchar(2000) = '*',		--字段名(全部字段为*)
    @WhereString varchar(1000) ='',		--条件语句(不用加where)
    @OrderString varchar(500),			--排序字段(必须!支持多字段不用加order by)
    @PageSize int,				--每页多少条记录
    @PageIndex int = 1,				--指定当前为第几页
    @TotalRecord int output			--返回总记录数
)
AS
 
BEGIN

    --处理开始点和结束点
    Declare @StartRecord int;
    Declare @EndRecord int;
    Declare @TotalCountSql nvarchar(1000);
    Declare @SqlString nvarchar(4000);
    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,'+@FieldsString+' 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)) + ' order by '+ @OrderString;
    --
    --print (@SqlString)
    Exec(@SqlString)
END
(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)


关于我们-广告合作-联系我们-积分规则-网站地图

Copyright(C)2013-2017版权所属asp编程网