【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. Spring注解@Value

    本文参考自: https://blog.csdn.net/ryelqy/article/details/77453713 @Value能让我们在java代码中使用property文件的属性,使用@Va ...

  2. HBase Shell相关

    1.进入hbase命令行 ./hbase shell 2.基本命令 显示hbase中的表List list 查询user表中的所有信息Scan scan 'users' 清空user表中的数据Trun ...

  3. git clone,push,pull,fetch命令详解

    源自 Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌 ...

  4. HDU - 3068 最长回文(马拉车Manacher)题解

    思路:马拉车裸题,我们用一个p[i]数组代表以i为中心的最大回文半径.这里用了一个小技巧,如果一个串是aaaa这样的,那我们插入不相干的字符使它成为#a#a#a#a#,这样无论这个串是奇数还是偶数都会 ...

  5. luogu P1605 迷宫

    https://www.luogu.org/problem/show?pid=1605 就很实在的深搜  我就是模拟的地图搜索  没想到竟然1A了   给了我很大的信心 #include<bit ...

  6. splay入门教程

    笔者一个数据结构的蒟蒻还是奇迹般的搞明白了splay的基本原理以及实现方法,所以写下这篇随笔希望能帮到像我当初一脸懵逼的人. 我们从二叉查找树开始说起: 二叉查找树是一棵二叉树,它满足这样一个性质:所 ...

  7. 更改idea快捷键方式为eclipse风格

    打开配置窗口 菜单栏中的File-settings 或者快捷键 ctrl+alt+s 设置keymap 在弹出的setting页面中左侧导航中选择Keymap: 在keymaps下拉列表中选择Ecli ...

  8. java set初始化问题

    set在执行add方法时,多次报空指针异常,后来发现Set初始化时,如果是 Set<Type> set = null; 这样的话,在执行 set.add(element)的时候会报空指针异 ...

  9. Android之获取输入用户名与密码发送短信

    打算在过两三天的时间我就要准备出发去浙江了,所以把之前的资料来个总结. 这都是在课堂上做过的作业. 好了,废话少说,直接上代码. 步骤: 1.设置单击事件2.获取输入的QQ号码与密码3.判断输入获取的 ...

  10. thinkphp3.2验证码在服务器上显示不出来

    ThinPHP3.2 验证码 在本地服务器访问可以显示,上传到服务器就不能访问了 /**** * 验证码 */ function code() { $config=array( 'fontSize'= ...