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=
    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
时间: 2024-10-25 21:34:54

SQL存储过程分页查询--只支持MSSQL2005及以上的相关文章

SQL 存储过程 分页查询

ALTER PROCEDURE [dbo].[gzProc_TablePage] @tablename varchar(MAX),--表名 @selcolumn varchar(MAX),--查询字段 @where varchar(MAX),--where条件 @sortcolumn varchar(MAX),--排序字段 @pagecount int,--每页记录数 @pageindex int--页号ASBEGIN /*************************************

SQL 存储过程 分页

set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Author: *** -- Create date: 2014-03-27 20:00 -- Description: 采用最新的 row_number() over 技术高效分页方法 -- ============================================= ALTER PRO

SQL存储过程分页(通用的拼接SQL语句思路实现)

多表通用的SQL存储过程分页 USE [EmailCenter] GO /****** Object: StoredProcedure [dbo].[Common_PageList] Script Date: 2016/2/29 11:00:19 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROC [dbo].[Common_PageList] ( @tab nvarchar(200),---表名 @strFl

[.NET] SQL数据分页查询

[.NET] SQL数据分页查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. SELECT Id, Name FROM Users 数据分页查询 当数据量过多时,系统会需要采用分页的方式来分批取得数据.这时可以改写原有的SQL查询指令,在其中加入ROW_NUMBER(),来为每笔资料打上编号.后续依照系统需求,取得某个编号范围内的数据,就完成在系统中提供数据分页查询的功能.(

sql server分页查询

1.引言 在列表查询时由于数据量非常多,一次性查出来会非常慢,就算一次查出来了,也不能一次性显示给客户端,所以要把数据进行分批查询出来,每页显示一定量的数据,这就是数据要分页. 2.常用的数据分页方法 我们经常会碰到要取n到m条记录,就是有分页思想,下面罗列一下一般的方法. 我本地的一张表 tbl_FlightsDetail,有300多W记录,主键 FlightsDetailID(Guid),要求按照FlightsDetailID排序 取 3000001 到3000010 之间的10条记录,也是

动态sql实现分页查询

1.创建实体类对象需要查询的条件com.rl.ecps.model.QueryCondition private Long brandId; private Short auditStatus; private Short showStatus; private String itemName; private Integer pageNo; private Integer startNum; private Integer endNum; 2.查询语句 查询条数: <select id="

SQL Server 分页查询存储过程

1.低效的分页 SELECT TOP m-n+1 * FROM publish WHERE (id NOT IN (SELECT TOP n-1 id FROM publish)) 但这个存储过程有一个致命的缺点,就是它含有NOT IN字样.虽然我可以把它改造为: SELECT TOP 页大小 * FROM Table1 WHERE not exists (select * from (select top (页大小*页数) * from table1 order by id) b where

SQL SERVER 分页查询 和 Inser 添加并返回Id

--第一种分页 SELECT * FROM ( select ROW_NUMBER() over(order by id) as rows,* from [dbo].[M_User] --WHERE Id>1 ) AS T where rows BETWEEN 0 AND 2 --第二种分页 需SQL SERVER 2012以上支持 select * from [M_Role] order by Id offset 0 rows fetch next 10 rows only ; --执行Ins

sql主表分页查询关联子表取任意一条高效方案

有个业务场景,主表中一条数据,在子表中有多条详情数据.对数据进行展示的时候,产品希望随意拿一条子表的数据关联展示出来,用了很多方案,但是都不够好. sql查询取子表任意一条,多个字段的方案 最终找到一个高效的方案记录如下: 需求如图: 最早的第一套方案: select distinct A.ID, A.Title, A.[Description], A.xx1, A.xx2, A.xx3, B.ID as BId, B.xxA, B.xxB, B.xxC, B.xxD from A left j