【1】

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

ALTER PROCEDURE [dbo].[procCom_Get_Pagination]
(
@Field_SQL varchar(2000), -- 返回的字段SQL
@From_SQL varchar(1000), -- From中的SQL
@Where_SQL varchar(4000), -- WhereSQL
@Order_SQL varchar(255), -- 排序字段
@Current_Page int, -- 当前显示的页码
@Page_Size int, -- 每页条数 如果小于等于0 表示不分页
@Total_Record int output, -- 总记录数
@Total_Page int output -- 总页数
)AS
BEGIN
DECLARE
@v_SelectSQL varchar(4000)

SET NOCOUNT ON;

BEGIN TRY
IF LEN(ltrim(rtrim(@Where_SQL)))=0
SET @Where_SQL='1=1';

IF @Current_Page<=0
SET @Current_Page=1;

SET @v_SelectSQL='Select count(1) from '+@From_SQL+' Where '+@Where_SQL;

EXEC procCom_Calc_Total_Page @Count_SQL =@v_SelectSQL,
@Page_Size = @Page_Size,
@Total_Record = @Total_Record OUTPUT,
@Total_Page = @Total_Page OUTPUT

SELECT @v_SelectSQL=dbo.funcCom_Get_Pagination_SQL(@Field_SQL,@From_SQL,@Where_SQL,@Order_SQL,@Current_Page,@Page_Size,@Total_Page);

--测试的时候打印,正式环境注销打印
--PRINT @v_SelectSQL;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

EXEC(@v_SelectSQL);

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

END TRY
BEGIN CATCH
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

--记录数据库的错误信息
DECLARE @Note varchar(2000);
SET @Note='procCom_Get_Pagination SQL='+@v_SelectSQL;

EXEC procCom_Log_DB_Msg_Error @Note =@Note;

RETURN ERROR_NUMBER();
END CATCH
END

【2】

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

ALTER PROCEDURE [dbo].[procCom_Calc_Total_Page]
(
@Count_SQL varchar(4000), -- Select count(1) from ** 的SQL
@Page_Size int, -- 每页条数
@Total_Record int output, -- 总记录数
@Total_Page int output -- 总页数
)AS
BEGIN
SELECT @Total_Record=0,@Total_Page=0;

BEGIN TRY
DECLARE @v_Num_Table table
(
Num int
)
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

INSERT @v_Num_Table EXEC(@Count_SQL);

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

SELECT @Total_Record=Num FROM @v_Num_Table;

--分页显示 默认每一页显示20条
IF (@Page_Size<=0 OR @Total_Record<=@Page_Size)
SET @Total_Page=1
ELSE
BEGIN
IF(@Total_Record%@Page_Size!=0)
SET @Total_Page=@Total_Record/@Page_Size+1;
ELSE
SET @Total_Page=@Total_Record/@Page_Size;
END

RETURN 0;
END TRY
BEGIN CATCH
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

--记录数据库的错误信息
DECLARE @Note varchar(2000);
SET @Note='procCom_Calc_Total_Page SQL='+@Count_SQL;

EXEC procCom_Log_DB_Msg_Error @Note =@Note;

RETURN ERROR_NUMBER();
END CATCH
END

【3】

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO

ALTER FUNCTION [dbo].[funcCom_Get_Pagination_SQL]
(
@Field_SQL varchar(2000), -- 返回的字段SQL
@From_SQL varchar(1000), -- From中的SQL
@Where_SQL varchar(2000), -- WhereSQL
@Order_SQL varchar(255), -- 排序字段
@Current_Page int, -- 当前显示的页码
@Page_Size int, -- 每页条数 如果小于等于0 表示不分页
@Total_Page int -- 总页数
)
RETURNS varchar(4000)
AS
BEGIN
DECLARE
@v_SelectSQL varchar(4000)

IF @Current_Page<=0
SELECT @Current_Page=1;

--不分页 或 页数=1
IF(@Page_Size<=0 or @Total_Page<=1)
BEGIN
SELECT @v_SelectSQL='SELECT '+@Field_SQL+' FROM '+@From_SQL+' Where '+@Where_SQL +' order by '+@Order_SQL;
END
ELSE
BEGIN
SELECT @v_SelectSQL='SELECT '+@Field_SQL+' FROM (SELECT '+@Field_SQL+' ,Row_Number() OVER(order by '+@Order_SQL+') as Inner_Row_ID '
+' FROM '+@From_SQL+' Where '+@Where_SQL
+' ) list WHERE Inner_Row_ID between '+CONVERT(varchar,@Page_Size)+'*'+CONVERT(varchar,@Current_Page)
+'-'+CONVERT(varchar,@Page_Size)+'+1 AND '+CONVERT(varchar,@Page_Size)+'*'+CONVERT(varchar,@Current_Page);
END
RETURN(@v_SelectSQL);
END

【5】

EXEC procCom_Get_Pagination
@Field_SQL = ' * ',
@From_SQL = ' #Temp_Stat',
@Where_SQL = '',
@Order_SQL = @v_order_sql,
@Current_Page = @Current_Page,
@Page_Size = @Page_Size,
@Total_Record = @Total_Record OUTPUT,
@Total_Page = @Total_Page OUTPUT

SQL 相关分页方法的更多相关文章

  1. SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总

    SQL Server游标   转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...

  2. SQL SERVER 分页方法

    最近项目中需要在SQL SERVER中进行分页,需要编写分页查询语句.之前也写过一些关于分页查询的语句,但是性能不敢恭维.于是在业务时间,在微软社区Bing了一篇老外写的关于SQL SERVER分页的 ...

  3. SQL server 分页方法小结

    这里面介绍一下常用的分页方法: 1.使用top来分页 select top @pageSize * from table where id not in (select top @pageSize*( ...

  4. SQL Server 分页方法汇总

    PageSize = 30 PageNumber = 201 方法一:(最常用的分页代码, top / not in) UserId UserId from UserInfo order by Use ...

  5. thinkphp5 原生sql带分页方法

    1.先在顶部引入use think\paginator\driver\Page; 2.使用下例代码 $pageNumber = input('page')? input('page'):'0';//客 ...

  6. Oracle、SQL Server、MySQL分页方法

    测试用例:查询TEST_TABLE表中TEST_COLUMN列的第10-20条数据 1,Oracle分页方法 SELECT A.* FROM ( SELECT ROWNUM ROWNO, B.* FR ...

  7. 3种SQL语句分页写法

    在开发中经常会使用到数据分页查询,一般的分页可以直接用SQL语句分页,当然也可以把分页写在存储过程里,下面是三种比较常用的SQL语句分页方法,下面以每页5条数据,查询第3页为例子: 第一种:使用not ...

  8. Sql Server 2012 的新分页方法分析(offset and fetch) - 转载

    最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的 其中 offset ...

  9. Sql Server 2012 分页方法分析(offset and fetch)

    最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的.其中  offse ...

随机推荐

  1. P1351 联合权值(树形dp)

    P1351 联合权值 想刷道水题还交了3次.....丢人 (1.没想到有两个点都是儿子的状况 2.到处乱%(大雾)) 先dfs一遍处理出父亲$fa[x]$ 蓝后再一遍dfs,搞搞就出来了. #incl ...

  2. 20172305 2018-2019-1 《Java软件结构与数据结构》第四周学习总结

    20172305 2018-2019-1 <Java软件结构与数据结构>第四周学习总结 教材学习内容总结 本周内容主要为书第六章内容: 列表 有序列表(元素按照元素内在特性进行排序) 无序 ...

  3. JS判定注册表单的几个方式 及 Ajax进行用户名存在判定

    最近感觉不赶紧把代码逻辑记一下梳理一下,再做的时候就容易进入"逻辑误区". 有个表单,简单点. <!DOCTYPE html> <!-- 注册表单验证,用户名格式 ...

  4. SDN原理 OpenFlow协议 -1

    本文基于SDN原理视频而成:SDN原理 OpenFlow OpenFlow 协议 和 传统的路由选择协议 有很多相似的地方,同时在某些地方也具有一定的颠覆性. 路由表,由IP地址和子网掩码组成.MAC ...

  5. ros 杀掉所有节点

    rosnode kill -a 或者 rosnode kill --all

  6. php 数值数组

    <?php $cars=array("Volvo","BMW","Toyota"); echo ] . ] . ] . ". ...

  7. Coderforce-574C Bear and Poker(素数唯一分解定理)

    题目大意:给出n个数,问能不能通过让所有的数都乘以2的任意幂或乘以3的任意幂,使这n个数全都相等. 题目分析:最终n个数都是相等的,假设那个数为x,根据素数唯一分解定理,x能分解成m*2p3q.所以, ...

  8. UVA-1605 Building for UN (构造)

    题目大意:n个国家的人要在一栋大厦里办公,要求任意两个国家的办公室要相邻(同层同边或邻层同面),设计一个满足要求的方案. 题目分析:题目限制较少,任意构造出一个解即可. 代码如下: # include ...

  9. java中进行四舍五入

    在oracle中有一个很好的函数进行四舍五入,round(), select round(111112.23248987,6) from dual; 但是java的Number本身不提供四舍五入的方法 ...

  10. java读取和写入浏览器Cookies

    首先我们认识下什么是cookies: cookie实际上是一个存在你硬盘里的数据,但是这些数据很特殊,只能由web应用提交给浏览器帮助存储,并且我们还能读取浏览器存在本地的cookie web应用一般 ...