超棒的存储过程分页写法
--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