来古计算机 > 数据库 > 正文

SQL存储过程分页查询

06.jpg

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=

    N'with 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


推荐文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

标签列表
网站分类
最新留言

Powered By Z-BlogPHP and Terry

Copyright @ laigucomputer.com 来古计算机 工信部备案号:粤ICP备18009132号