SQL分页的应用

来源:互联网 发布:淘宝皮草店装修效果图 编辑:程序博客网 时间:2024/05/16 07:07

在使用列表页面往往会涉及到分页,然而现在以easyui的列表插件为主,easyui的列表都自带有分页,但是体现分页效果并不仅仅是分页插件,更多的在于分页时对数据的查找,数据库SQL分页在列表呈现中就体现出了其重要性,以前用过的分页存储过程有很多,都是涉及算法,自己在存储过程里面进行计算,用的最多的就是用ROW_NUMBER()进行数据分页处理,今天我并不是用ROW_NUMBER()来分页,利用OFFSET FETCH NEXT分页这是
SQL Server 2012新方法
对于测试表我这里就不展示了
code:

CREATE PROCEDURE [dbo].[PagingStorageQuery]       @TableName      NVARCHAR(100), --数据源对象[表名、视图名]<必填>       @QueryTerm      NVARCHAR(MAX), --查询条件       @PageIndex      INT,           --索引页<必填>       @PageSize       INT,           --页面条数<必填>       @SortField      NVARCHAR(50),  --排序字段<必填>       @Sort           INT,           --排序方式[0.ASC<升序 默认> 1.DESC<降序>]       @DisplayField   NVARCHAR(MAX), --显示字段[默认*]       @IsRowNumber    INT=NULL,      --是否开始RowNumber[默认不开启,0.不开启 1.开启]       @RowCount       INT=NULL OUTPUT     --数据总数ASBEGIN    SET NOCOUNT ON;    DECLARE @QueryString      NVARCHAR(MAX)  --查询条件    DECLARE @StartRowNumber   NVARCHAR(10)   --开始查询条数    DECLARE @SortSql          NVARCHAR(100)  --排序Sql    DECLARE @SqlString        NVARCHAR(MAX)  --执行SqlString    DECLARE @SqlCount         NVARCHAR(MAX)  --执行SqlCount    --初始化查询条件    SET @QueryString=' WHERE 1=1 '    --初始化开始查询条件    SET @StartRowNumber=((@PageIndex-1)*@PageSize)    --判断是否存在排序    IF(ISNULL(@SortField,'')<>'')      BEGIN        IF(@Sort=1)           SET @SortSql=' ORDER BY '+@SortField+' DESC'        ELSE           SET @SortSql=' ORDER BY '+@SortField+' ASC'      END    --判断查询条件是否存在    IF(ISNULL(@QueryTerm,'')<>'')       SET @QueryString=@QueryString+' AND '+@QueryTerm    --判断显示字段是否存在    IF(ISNULL(@DisplayField,'')='')      SET @DisplayField='*'     --判断数据源对象是否存在    IF(ISNULL(@TableName,'')<>'')      BEGIN        --总记录数        SET @SqlCount = 'SELECT @tempCount = COUNT(*) FROM ' + @TableName+@QueryString        IF(@IsRowNumber=1)          BEGIN             SET @SqlString='SELECT ROW_NUMBER() OVER('+ISNULL(@SortSql,'')+') as RowNumber,* FROM (                             SELECT '+@DisplayField+' FROM '+@TableName+@QueryString+ISNULL(@SortSql,'') +' OFFSET '                             +CONVERT(NVARCHAR(10),@StartRowNumber)+' ROWS FETCH NEXT '+CONVERT(NVARCHAR(10),@PageSize)+' ROWS ONLY) AS A'          END        ELSE          BEGIN            SET @SqlString='SELECT '+@DisplayField+' FROM '+@TableName+@QueryString+ISNULL(@SortSql,'') +' OFFSET '                        +CONVERT(NVARCHAR(10),@StartRowNumber)+' ROWS FETCH NEXT '+CONVERT(NVARCHAR(10),@PageSize)+' ROWS ONLY'          END        PRINT @SqlString        PRINT @SqlCount        EXEC(@SqlString)        EXECUTE SP_EXECUTESQL @SqlCount,N'@tempCount BIGINT OUTPUT',@tempCount = @RowCount OUTPUT;      ENDEND

注:上面标注的必填项不能为空,否则存储过程会报错,以上代码直接复制可用

0 0
原创粉丝点击