SQL存储过程分页查询--只支持MSSQL2005及以上

Posted NetDeveloper

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL存储过程分页查询--只支持MSSQL2005及以上相关的知识,希望对你有一定的参考价值。

USE [QSM]
GO
/****** Object:  StoredProcedure [dbo].[UP_SysGetListByPage]    Script Date: 04/12/2017 17:47:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    分页存储过程(只支技MSSQL2005及以上版本)
-- =============================================
ALTER PROCEDURE [dbo].[Sp_GetListByPage]
    @Select nvarchar(1000)        --要查询的字段(已含SELECT)
    ,@From nvarchar(1000)        --表名          (已含From)
    ,@WhereSql nvarchar(1000)    --查询条件    (已含Where 1=1 )
    ,@GroupBy nvarchar(250)        --分组        (已含Group By)
    ,@Having nvarchar(250)        --过滤条件    (已含Having)
    ,@OrderBy nvarchar(500)        --排序字段    (已含Order By)
    ,@IsDesc bit=0                --排序:   0=ASC,1=DESC
    ,@PageIndex int = 0            --页索引: 0=第1页
    ,@PageSize int = 10            --页容量: 默认10行
    ,@IsRecord bit =0            --0=数据集查询,1=取记录数
AS
BEGIN
    SET NOCOUNT ON;
    
    DECLARE @sqlFrom nvarchar(3000);    --要查询的字段及表
    DECLARE @pagedSql nvarchar(max);    --拼接后的总SQL语句
    
    SET @sqlFrom=N from  + @From;
    IF(LEN(@WhereSql)>0)    SET @sqlFrom+= where 1=1  + @WhereSql;
    IF(LEN(@GroupBy)>0)        SET @sqlFrom+= group by  + @GroupBy;
    IF(LEN(@Having)>0)        SET @sqlFrom+= having  + @Having;
    IF(@IsDesc=1)            SET @OrderBy+= DESC ;
    
    SET @pagedSql=
    Nwith PagedList as 
        + ( 
        +    select top 100 percent +@Select
        +       , row_number() over (order by +@OrderBy+) as mydata_RowNumber 
        +         @sqlFrom 
        + ) 
        + select * 
        + from PagedList 
        + where mydata_RowNumber between  + STR(@PageIndex*@PageSize+1) 
        +                            and  + STR(@PageIndex*@PageSize+@PageSize) ;    

    IF @IsRecord =1
        SET @pagedSql = select count(1) as [RowCount] from  + @From + where 1=1  + @WhereSql ;
    
    EXEC(@pagedSql)
    --SELECT @pagedSql    --生成的语句

END

 

以上是关于SQL存储过程分页查询--只支持MSSQL2005及以上的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 2005 中使用 ROW_NUMBER() OVER () 对不同列进行排序的分页查询

在 SQL Server 2005 中使用 ROW_NUMBER() OVER () 对不同列进行排序的分页查询

jsp+sqlserver 2005模糊查询分页时候点击那个首页或下一页的时候老是查出所有

mssql2012的分页查询

[转]史上最全的MSSQL复习笔记

MSSQL 2005 存储过程中最大的文本可用变量?