【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. AOP 增强方法

    Spring AOP 提供了 5 种类型的通知,它们分别是 Before Advice(前置通知).After Returning Advice(后置通知).Interception Around A ...

  2. The current .NET SDK does not support targeting .NET Core 3.0

    编译错误 Severity Code Description Project File Line Suppression StateError NETSDK1045 The current .NET ...

  3. Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister

    http://codeforces.com/contest/812/problem/B 题意: 有n层楼,每层楼有m个房间,1表示灯开着,0表示灯关了.最两侧的是楼梯. 现在每从一个房间移动到另一个房 ...

  4. org.springframework.transaction 包改成 spring-tx

    org.springframework.transaction 包改成 spring-tx org.springframework.transaction  3.2.2以后的版本,全改到 spring ...

  5. Oracle管道函数(Pipelined Table Function)实现的实例

    1. 简单的例子(返回单列的表) 1>创建一个表类型 create or replace type t_table is table of number; 2>创建函数返回上面定义的类型 ...

  6. linux 命令-case

    case 命令作用: case语句使用于需要进行多重分支的应用情况 case 命令使用场景 在shell中的case结构与C/C++中的switch结构是相同的. 它允许通过判断来选择代码块中多条路径 ...

  7. tintColor 与 UIImage.renderingMode 渲染

    在iOS7中,UIView新增了一个属性tintColor.这是一个UIColor,被使用在UIView中改变应用程序的外观的.默认tintColor的值为nil,这表示它将会运用父视图层次的颜色来进 ...

  8. Git Error: warning: refname 'origin/branch-name' is ambiguous.

    When this happened, it created the file .git/refs/heads/origin/branch-name. So, I just deleted the f ...

  9. window 更新 nodejs

    一直号称js程序员,结果发现自己机器的node版本才到 4.x.赶紧升级下. 在window下可以直接去nodejs.org下载最新的稳定版装上就行.同时也可以通过 powershell 命令行更新. ...

  10. 网站使用 rel="noopener" 打开外部锚

    当您的页面链接至使用 target="_blank" 的另一个页面时,新页面将与您的页面在同一个进程上运行. 如果新页面正在执行开销极大的 JavaScript,您的页面性能可能会 ...