首页 > 代码库 > SQL存储过程分页查询--只支持MSSQL2005及以上

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及以上