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),---表名
@strFld nvarchar(max), --字段字符串
@strWhere varchar(max), --where条件
@PageIndex int, --页码
@PageSize int, --每页容纳的记录数
@Sort VARCHAR(255), --排序字段及规则,不用加order by
@Total int output
)
AS
declare @strSql nvarchar(max)
set nocount on;

set @strSql=‘ SELECT * FROM (SELECT ROW_NUMBER()
  OVER(ORDER BY ‘ + @Sort + ‘) AS rownum, ‘ + @strFld + ‘ FROM ‘ + @tab + ‘ where 1=1 ‘ + @strWhere + ‘) AS Dwhere
  WHERE rownum BETWEEN ‘ + CAST(((@PageIndex-1)*@PageSize + 1) as nvarchar(20)) + ‘ and ‘ + cast((@PageIndex*@PageSize) as nvarchar(20))
  exec (@strSql)

 set @strSql=‘SELECT @Total = COUNT(0) FROM ‘ + @tab + ‘ WHERE 1=1 ‘ + @strWhere
 EXECUTE sp_executesql @strSql,N‘@Total INT OUTPUT‘,@Total OUTPUT

set nocount off;
GO
时间: 2024-10-25 21:34:56

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

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存储过程分页查询--只支持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 d

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 存储过程分页

USE [as_services] GO /****** Object: StoredProcedure [dbo].[Sp_CustomPageV5] Script Date: 01/05/2015 09:20:39 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[Sp_CustomPage] @QueryStr nvarchar(4000), --表名.视图名.查询语句 @Quer

SQL存储过程分页

CREATE PROC ZDY_FY(@Pages INT, @pageRow INT) --@Pages第几页 @pageRow每页显示几行 AS BEGIN DECLARE @starNum INT, --开始行 @endNum INT --结束行 SET @starNum = (@Pages -1) * @pageRow SET @endNum = @starNum + @pageRow SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY D

使用SQL存储过程

SQLSERVER: 变量的声明: 声明变量时必须在变量前加@符号 DECLARE @I INT 变量的赋值: 变量赋值时变量前必须加set SET @I = 30 声明多个变量: DECLARE @s varchar(10),@a INT if语句: if .. begin ... end else if .. begin ... end else begin ... end Example: DECLARE @d INT set @d = 1 IF @d = 1 BEGIN PRINT '正

sqlserver 存储过程中拼接sql语句 动态执行

ALTER PROC [dbo].[Student_Friend_Get] @startRowIndexId INT, @maxNumberRows INT, @schoolId INT, @gradeId INT, @cId INT, @keyWords NVARCHAR(100), @userName VARCHAR(50) AS BEGIN DECLARE @sqlfilter VARCHAR(max) SET @sqlfilter = ' ' IF(@schoolId <> -1) S

Sql Server 存储过程分页

[2014-09-05] 在企业级项目开发中,分页查询,获取某一类数据的List列表,这一功能是最普遍也是最重要的功能.其做法有很多种,例如ORM中自定义分页查询,一般情况下是拼接强类型的查询条件,然后转换成sql语句,查出出分页结果.在ORM转换过程中会稍微损失性能,效率会降低.对于百万级以上的大数据量,要求查询界面显示速度快,此时手动写存储过程,并且在存储过程中分页是最佳选择.下面给出具体的示例与说明: ============================================

SQL Server 分页语句

表中主键必须为标识列,[ID] int IDENTITY (1,1) 1.分页方案一:(利用Not In和SELECT TOP分页) SELECT TOP 页大小 * FROM TestTable WHERE (ID NOT IN (SELECT TOP (页大小*(页数-1)) id FROM 表 ORDER BY id)) ORDER BY ID 2.分页方案二:(利用ID大于多少和SELECT TOP分页) SELECT TOP 页大小 * FROM TestTable WHERE (ID