在项目中,会遇到查询出的结果排序分页的问题,可以有多种解决方法,一个是利用开发工具提供的方法,例如.NET Visual Studio中的GridView,就提供了排序,分页功能。但如果情况复杂,我们可以把排序分页放到存储过程来完成。
以一个简单例子来说明问题:
Table [ReportFile]
FIELD TYPE
id int
name nvarchar(255)
content image
以id降序排序分页的存储过程如下:
CREATE PROCEDURE [dbo].[Reports_Page]
@pagesize int, -------- 每页行数
@pageindex int, -------- 制定页数
@condition varchar(200) -------- 查询条件
AS
BEGIN
DECLARE @strSQL varchar(5000)
IF @pageindex = 1
BEGIN
SET @strSQL = 'SELECT TOP '
+ STR(@pagesize)
+ ' [id],'
+ '[name],'
+ '[content] '
+ 'FROM [Reports_Page] '
+ 'WHERE '
+ @condition
+ ' ORDER BY [ReportArchiveGLTI_ID] DESC'
END
ELSE
BEGIN
SET @strSQL = 'SELECT TOP '
+ STR(@pagesize)
+ ' [id],'
+ '[name],'
+ '[content] '
+ 'FROM [Reports_Page] '
+ @condition
+ 'AND ([id] < ('
+ 'SELECT min([id]) FROM ( '
+ 'SELECT TOP '
+ STR((@pageindex-1)*@pagesize)
+ ' [id],'
+ '[name],'
+ '[content] '
+ 'FROM [Reports_Page] '
+ @condition
+ ' ORDER BY [ReportArchiveGLTI_ID] DESC') as tblTmp ) )'
+ ' ORDER BY [ReportArchiveGLTI_ID] DESC'
END
EXEC(@strSQL)
END
GO
当调用存储过程时,提供参数页码、每页行数、条件即可。