超棒的存储过程分页写法

--Question获取所有列表(分页、排序)

 ---创建存储过程

 CREATE PROCEDURE [dbo].[Pr_Question_GetPagedListAll]  

             @StartRowIndex int, --起始记录号  

             @MaximumRows int, --记录数   

             @SortExpression varchar(1000) --排序字段

 AS BEGIN  --@SortExpression参数:请根据实际查询需要进行默认值设定

 SET NOCOUNT ON    

 ---声明查询语句、总行数、临时表

 DECLARE @SqlGet varchar(1600)  

 DECLARE @TotalRecords int    //创建表变量(总行数)

 CREATE TABLE #PageIndex    //创建临时表,存储数据主键 

  (   

       [IndexId] int IDENTITY (0, 1) NOT NULL,   

       [QuestionId] Int  

 )    

 ---设置排序条件

IF @SortExpression IS NULL --OR (@SortExpression = '')     //获取排序条件

       SET @SortExpression = '' --请在此处设置默认值(同时启用上一行后半部分的判断)    

IF @SortExpression <> ''   

        SET @SortExpression = ' ORDER BY ' + @SortExpression    

 ---执行查询语句,设置表和总行数

SET @SqlGet = 'SELECT [QuestionId] FROM [dbo].[Question]  ' + @SortExpression    INSERT INTO #PageIndex  (   [QuestionId]  ) EXEC (@SqlGet)    

SET @TotalRecords = @@ROWCOUNT    //设置总行数

 ---根据分页值查询Question表对应数据

SELECT   biz.[QuestionId],  

              biz.[Title],   

              biz...  

FROM [dbo].[Question] biz, #PageIndex p  

WHERE   biz.[DraftQuestionId] = p.[DraftQuestionId] AND   

              p.IndexId >= @StartRowIndex AND   p.IndexId < @StartRowIndex + @MaximumRows  

ORDER BY p.IndexId       //将表组合进行查询,并分页

 ---关闭计数器并返回变量值

SET NOCOUNT OFF         //将计数器开关关闭

RETURN @TotalRecords  //设置返回总行数

END

GO

posted on 2012-02-09 11:40  朝扬  阅读(276)  评论(0编辑  收藏  举报