加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL存储过程分页查询

发布时间:2022-10-28 13:31:01 所属栏目:MsSql教程 来源:互联网
导读:
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
-- =======

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:

-- 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

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!