分页存储过程:抛砖引玉——通用分页存储过程(SqlServer2005)

  从网上看了很多分页存储过程没有发现个所有表通用!也许有更高只是我自己不知道而已特发此贴以集思广益

  我先发个我自己写通用分页存储过程希望前辈、哥哥姐姐、弟弟妹妹们批评指正本人不胜感激

 

="code_img_closed" src="http://CrazyCoder.cn/WebFiles/200912/33acc47f-0742-498f-b694-0359aebe62ea.g" alt="" />="code_img_opened" _disibledevent=>="cnblogs_code_collapse">代码 --@Columns          要得到
--
@TableName        表名(可做联合查询)
--
@Condition        查询条件
--
@OrderBy          排序规则
--
@PageNum          第几页
--
@PageSize         每页有多少务记录
--
@PageCount        输出总页数
--
@RecordCount      输出总记录数Create Procedure proc_CurrencyPage
(
    
@Columns        varchar(max),
    
@TableName      varchar(max),
    
@Condition      varchar(max),
    
@OrderBy        varchar(max),
    
@PageNum        ,
    
@PageSize       ,
    
@PageCount       output,
    
@RecordCount    big output
)AS
    
DECLARE @Sql nvarchar(max);
    
Set @Sql = 'Select @CountOut = Count(*) From ' + @TableName + ' Where ' + @Condition;
    
EXEC sp_executesql @Sql,N'@CountOut INT OUTPUT',@CountOut = @RecordCount OUTPUT;

    
Set @PageCount = @RecordCount / @PageSize;
    
IF(@RecordCount % @PageSize > 0Set @PageCount = @PageCount + 1;
    
IF(@PageNum < 1Set @PageNum = 1;
    
IF(@PageNum > @PageCountSet @PageNum = @PageCount;
    
Declare @BRowNum ,@ERowNum ;
    
Set @BRowNum = (@PageNum - 1* @PageSize;
    
Set @ERowNum = @BRowNum + @PageSize;
    
Set @Sql = 
       
'Select * From (
            Select 
'+@Columns+', ROW_NUMBER Over(Order By ' + @OrderBy + ') As RowNum 
            From 
' + @TableName + ' 
            Where 
' + @Condition + '
        ) as TempT 
        Where RowNum > 
' + Convert(varchar(10),@BRowNum+ ' 
              And 
              RowNum <= 
' + Convert(varchar(10),@ERowNum+ ' 
              Order By 
' + @OrderBy;
    
Exec(@Sql);GO
--测试:Declare @Columns     varchar(max)Declare @TableName   varchar(max)Declare @Condition   varchar(max)Declare @OrderBy     varchar(max)Declare @PageNum     Declare @PageSize    Declare @PageCount   Declare @RecordCount big
 @Columns = 'ID,ReportID,ReportCondition' @TableName = '[PSYT_TS_ReportSort]' @Condition = 'ReportSort = ''Z''' @ORDERBY = 'ID' @PageNum = 2 @PageSize=20
Exec proc_CurrencyPage @Columns,@TableName,@Condition,@ORDERBY,@PageNum,@PageSize,@PageCount output,@RecordCount output


 

 

Tag标签: 分页,存储过程,SqlServer2005
Tags:  分页存储过程

延伸阅读

最新评论

发表评论