SQL 相关分页方法
【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 相关分页方法的更多相关文章
- SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总
SQL Server游标 转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...
- SQL SERVER 分页方法
最近项目中需要在SQL SERVER中进行分页,需要编写分页查询语句.之前也写过一些关于分页查询的语句,但是性能不敢恭维.于是在业务时间,在微软社区Bing了一篇老外写的关于SQL SERVER分页的 ...
- SQL server 分页方法小结
这里面介绍一下常用的分页方法: 1.使用top来分页 select top @pageSize * from table where id not in (select top @pageSize*( ...
- SQL Server 分页方法汇总
PageSize = 30 PageNumber = 201 方法一:(最常用的分页代码, top / not in) UserId UserId from UserInfo order by Use ...
- thinkphp5 原生sql带分页方法
1.先在顶部引入use think\paginator\driver\Page; 2.使用下例代码 $pageNumber = input('page')? input('page'):'0';//客 ...
- Oracle、SQL Server、MySQL分页方法
测试用例:查询TEST_TABLE表中TEST_COLUMN列的第10-20条数据 1,Oracle分页方法 SELECT A.* FROM ( SELECT ROWNUM ROWNO, B.* FR ...
- 3种SQL语句分页写法
在开发中经常会使用到数据分页查询,一般的分页可以直接用SQL语句分页,当然也可以把分页写在存储过程里,下面是三种比较常用的SQL语句分页方法,下面以每页5条数据,查询第3页为例子: 第一种:使用not ...
- Sql Server 2012 的新分页方法分析(offset and fetch) - 转载
最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的 其中 offset ...
- Sql Server 2012 分页方法分析(offset and fetch)
最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的.其中 offse ...
随机推荐
- Maven聚合项目在eclipse中显示没有层次
大部分时间都在用idea做maven的项目,今天用eclipse导入了maven项目,果然不出所料,界面有显示问题,各个模块都堆叠在同一层级,根本看不出父项目与子项目之间的层次关系,见下图: 于是找修 ...
- 使用cronolog工具给tomcat进行日志切割
关于cronolog的用法查看:https://www.freebsd.org/cgi/man.cgi?query=cronolog&apropos=0&sektion=0&m ...
- Python学习札记(二十二) 函数式编程3 filter & SyntaxError: unexpected EOF while parsing
参考: filter Problem SyntaxError: unexpected EOF while parsing 遇到该语法错误,一般是由于 括号不匹配 问题. Note 1.filter 用 ...
- Codeforces Round #413, rated, Div. 1 + Div. 2 C. Fountains(贪心 or 树状数组)
http://codeforces.com/contest/799/problem/C 题意: 有n做花园,有人有c个硬币,d个钻石 (2 ≤ n ≤ 100 000, 0 ≤ c, d ≤ 100 ...
- 菜单项onCreateOptionsMenu()和onOptionsItemSelected()的使用
Java源文件 package com.example.macname.myapplication; import android.support.v7.app.AppCompatActivity; ...
- 导出csv文件,导出axlsx文件。gem 'Axlsx-Rails' (470🌟);导入csv文件。
汇出 CSV 档案 需求:后台可以汇出报名资料 有时候后台功能做再多,也不如 Microsoft Excel 或 Apple Numbers 试算表软件提供的分析功能,这时候如果有汇出功能,就可以很方 ...
- 10个有趣的Javascript和CSS库
Tailwind CSS Tailwind是用于构建自定义用户界面的实用CSS框架. 每个Tailwind小应用都有多种尺寸,这使得创建响应式界面变得非常简单. 您可以自定义颜色,边框尺寸,字体,阴影 ...
- Page.TryUpdateModel 方法
使用来自值提供程序的值更新指定的模型实例. 使用来自值提供程序的值更新指定的模型实例. 命名空间: System.Web.UI程序集: System.Web(System.Web.dll 中) ...
- EBS 定义并发参数常用值集
1.ORG_ID 2.DATE 3.YES_NO
- 识别TLS加密恶意流量
利用背景流量数据(contexual flow data)识别TLS加密恶意流量 识别出加密流量中潜藏的安全威胁具有很大挑战,现已存在一些检测方法利用数据流的元数据来进行检测,包括包长度和到达间隔时间 ...