二、以下示例将返回行号为 50 到 60(含)的行,并以 OrderDate 排序。

USE AdventureWorks;

GO

WITH OrderedOrders AS

(SELECT SalesOrderID, OrderDate,

ROW_NUMBER() OVER (order by OrderDate)as RowNumber

FROM Sales.SalesOrderHeader )

SELECT *

FROM OrderedOrders

WHERE RowNumber between 50 and 60;

三、实现分页存储过程(固定到某个表的数据)

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author:      cxw

-- Create date: 2006/11/14

-- Description: 利用Row_Number函数实现分页存储过程

-- exec DividePageForROW_NUMBER 2,1,'',''

-- =============================================

Create PROCEDURE DividePageForROW_NUMBER

@iPageSize      int         --每页数

,@iIndexPage    int         --第几页

,@vOrderBy      varchar(50) --排序字段

,@iRowCount     int         --总记录数

AS

BEGIN

SET NOCOUNT ON;

with PageTable as

(

select row_number() over(order by ReasonID) TID,* from A

)

select *

from PageTable

where TID between ((@iIndexPage-1)*@iPageSize+1) and @iPageSize*@iIndexPage

SET NOCOUNT OFF;

END

GO

use study;

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author:  cxw
-- Create date: 2006/11/14
-- Description: 利用Row_Number函数实现分页存储过程(输出总记录数用返回一个字段)
--select * from OrderDetail
/*
--table表的分页
exec [PublicPageQuery] @vQueryString='OrderDetail'
,@vKeyID='OrderNo'
,@vQueryType='table'
--为空就取表里所有字段,否则取自已设定字段, 最好不要取所有,指定
,@vColunmString='OrderNo,ProdNo,ProdName' 
,@vIsHaveRowCount='no'
,@iPageSize=5
,@iIndexPage=2
--查询字符串的分页(单一的查询条件)
exec [PublicPageQuery] @vQueryString='select OrderNo,ProdNo,ProdName 
from  OrderDetail 
where OrderNo like ''%So%''
and ProdNo like ''%%'''
,@vKeyID='OrderNo'
,@vQueryType='select'
,@vColunmString='OrderNo,ProdNo,ProdName' 
,@vIsHaveRowCount='no'
,@iPageSize=5
,@iIndexPage=2
--带有关联的查询字符串
exec [PublicPageQuery] @vQueryString='SELECT * 
 FROM(
  SELECT * FROM (
  SELECT
RequestNo,RequestTypeID,RequestType,RequestUser,NeedToAddress,NeedArriveTime,Memo,Status
  FROM ERPDATA.dbo.TP_RequestOfficeCar
  UNION
  SELECT
A.RequestNo,A.RequestTypeID,RequestType,RequestUser,B.CustomerAddress as
NeedToAddress,B.NeedArriveTime,A.Memo,A.Status
  FROM ERPDATA.dbo.TP_RequestDeliverGoodsCar
A,ERPDATA.dbo.TP_RequestDeliverGoodsCarDetail B
  WHERE A.RequestNo=B.RequestNo
  ) M
  WHERE  isnull(RequestUser,'') LIKE ''%%''
   AND isnull(NeedToAddress,'') LIKE ''%%''
   AND isnull(Status,'') like ''%%''
   AND isnull(Memo,'') LIKE ''%%'' ) Main  '
,@vKeyID='OM.OrderNo'
,@vQueryType='select'
,@vColunmString='OrderNo,BillTo,BillToName'
,@vIsHaveRowCount='no'
,@iPageSize=5
,@iIndexPage=1
*/
-- =============================================
Create PROCEDURE [dbo].[PublicPageQuery]

@vQueryString  nvarchar(MAX)  --查询字符串,或表名
,@vKeyID   varchar(200)  --关键字(排序字段,索引字段,最好用索引字段,大大提高分页查询速度)
,@vQueryType  varchar(20)   --查询类型,为表(table),查询语句(select)
,@vColunmString  nvarchar(2000)  --所显示字段值(最好都添上此字段名)
,@vIsHaveRowCount varchar(5)   --是否显示总记录数,有(yes),不(no)
,@iPageSize  int      --每页数
,@iIndexPage int      --第几页

AS
BEGIN
SET NOCOUNT ON;
declare @vSQLString varchar(8000) --查询SQL字符串
,@vRowCountString varchar(50)  --自动增量统计查询字符串
,@vRowNumberString varchar(200)  --自动增量查询字符串
,@vWhereKeyStr varchar(10)   --条件关键字
,@iStart int      --开始位置
,@iEnd int       --结束位置
--将SQL语句优化,去掉没有必要的查询条件
--select * from  dbo.RecurrentSplit(@vQueryString,'and ',1,1)
--where isnull(SplitName,'')<>''
--return
set @vWhereKeyStr='%%'  --所要去掉的关键查询条件
if(charindex(@vWhereKeyStr,@vQueryString)=0)
begin
 goto lbl_Query
end
set @vQueryString=replace(@vQueryString,'
',' ') --去掉回车符
select @vQueryString=case when  A.IndexNo>0 --最少保留第一条查询条件,第一个条件最好最经常查询字段条件
 then 
   case when charindex(@vWhereKeyStr,B.SplitName)>0 
   then 
    --只替换所需要修改的无条件的字符串。
    replace(@vQueryString
     ,substring(B.SplitName,0,charindex(@vWhereKeyStr,B.SplitName)+len(@vWhereKeyStr)+2),'') 
   else @vQueryString 
  end
 else
  @vQueryString
 end
--select @vQueryString=
--  case when charindex('%%',B.SplitName)>0 
--  then replace(@vQueryString,B.SplitName,'') 
--  else @vQueryString 
--  end
from 
(
select * from  dbo.RecurrentSplit(@vQueryString,'and ',1,1)--字符串分割函数,之前有
where isnull(SplitName,'')<>''
) A
cross apply dbo.RecurrentSplit(A.SplitName,'or ',1,1) B
--set @vQueryString=case when
charindex('''',@vQueryString,charindex('where',@vQueryString))>0
--then @vQueryString else
left(@vQueryString,charindex('where',@vQueryString)-1) end
--select @vQueryString
--return
--查询断点
lbl_Query:
select @vSQLString=''
,@vRowNumberString='PageIndex=row_number() over(order by '+@vKeyID+')'
,@vQueryString=ltrim(rtrim(@vQueryString))
,@vColunmString=case when @vQueryType='table'
 then
  case when @vColunmString='' 
  then '*'
  else @vColunmString 
  end
 else --取出所要取出的字段
  case when @vColunmString=''
  then
   substring(@vQueryString,len('select')+1,charindex('from',@vQueryString)-len('select')-1)
  else @vColunmString end
 end
,@vQueryString=case  @vQueryType when 'table' 
 then 'select '+@vRowNumberString+char(13)
  +','+@vColunmString+' from '+@vQueryString 
 when 'select' 
 then 'select '+@vRowNumberString+char(13)
 +','+right(@vQueryString,len(@vQueryString)-len('select'))--'('+@vQueryString+')Alias' 
 else 'procedure'
 end
,@vRowCountString=case when @vIsHaveRowCount='yes' 
 then ',(select count(0) from PageTable) ''RowCount'''
 else '' end
,@iStart=(@iIndexPage-1)*@iPageSize+1
,@iEnd=@iPageSize*@iIndexPage

set
@vSQLString='with PageTable as
(
'+@vQueryString+'
)
select '
+@vColunmString+char(13)
+case when @vRowCountString='' then '' else @vRowCountString+char(13) end
+'from PageTable
where PageIndex between '+cast(@iStart as varchar)+' and '+cast(@iEnd as
varchar)
print @vSQLString
exec(@vSQLString)
SET NOCOUNT OFF;

END

分页存储过程--From:桌面备份 -> sql2005新功能.docx的更多相关文章

  1. 支持DISTINCT的通用分页存储过程(SQL2005)

    /****** 对象: StoredProcedure [dbo].[P_CommonPagination] 脚本日期: 07/22/2009 10:22:01 ******/ SET ANSI_NU ...

  2. SQLSERVER2012的分页新功能

    SQLSERVER2012的分页新功能 简介 SQL Server 2012中在Order By子句之后新增了OFFSET和FETCH子句来限制输出的行数从而达到了分页效果.相比较SQL Server ...

  3. 高效sql2005分页存储过程

    高效分页存储过程 --分页存储过程示例 Alter PROCEDURE [dbo].[JH_PageDemo] @pageSize int = 9000000000, @pageIndex int = ...

  4. SQL2005分页存储过程(支持多表联接)

    Code /*********************************************************   * 作    用:数据分页(完整SQL分页存储过程(支持多表联接)) ...

  5. CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系

    CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...

  6. Red Hat Enterprise Linux 7的新功能

     简介红帽最新版本的旗舰平台交付显著增强的可用性. 性能和可靠性. 丰富的新功能为架构. 系统管理员和开发人员提供所需的资源以更高效地进行创新和管理.架构师: 红帽® 企业 Linux® 7 适合 ...

  7. sqlserver2016新功能

    SQL Server 2016中的新功能(数据库引擎) 2017年1月13日  23分钟阅读时长 作者 本人建了个领优惠卷购物群,平时网购可以省点钱.有需要的加群:511169656交流,谢谢 本主题 ...

  8. OpenStack Q版本新功能以及各核心组件功能对比

    OpenStack Q版本已经发布了一段时间了.今天, 小编来总结一下OpenStack Q版本核心组件的各项主要新功能, 再来汇总一下最近2年来OpenStack N.O.P.Q各版本核心组件的主要 ...

  9. RAD Studio 10.3.2七大新功能介绍

    RAD Studio 10.3.2七大新功能 Delphi支持macOS 64位应用的开发. C++Builder中Windows 64位平台支持C ++ 17特性. C ++ LSP 代码洞察改进. ...

随机推荐

  1. 日志分析-Web

    http://my.oschina.net/chenguang/blog/376267 http://my.oschina.net/chenguang/blog/371275 http://my.os ...

  2. 上次的AJAX定时刷新多ID不正确,这次请教了高手之后补全

    关键是setInterval无法传递参数,所以用了匿名函数再包裹一下就好了. //重置发布进度 function resetPercent(id_data){ $.ajax({ url:'/autod ...

  3. 继续完成昨天的第一个点:更改DJANGO的ADMIN后台的表单显示

    遇到的问题是MANYTOMANY的选项太多,默认的DJANGO一个多选框搞得人蛋疼, 于是作了一个扩展,不是最好的,但方便多啦.. 也是在昨天说过的各个app的admin.py里操作: from dj ...

  4. 李洪强iOS开发之-PCH文件的配置

    pch 可以用来存储共享信息,比如设备屏幕的宽度,高度.版本号等等 公用信息 Xcode 老版本会自动为我们创建pch文件,新版本开始不自动创建了,如果需要使用可以自己手动创建 创建完成后可以在里面定 ...

  5. FORM Save : ORA-01403 FRM-40735 ORA-06502

    症状: FORM开发后挂上服务器后,运行保存按键提示: ORA-01403: 未找到任何数据 ----------------------------------------------------- ...

  6. Webform——验证控件

    验证控件一般是在注册的时候用到,是直接将JS代码封装到了控件里面,拉过来直接可以用,下面介绍一下主要用法: 1.CompareValidator:比较验证 常用属性:ControlToCompare ...

  7. 生成Excel錯誤 遠端程序呼叫失敗。 (發生例外狀況於 HRESULT: 0x800706BE)

    错误信息:详细信息:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005.网上找到 ...

  8. WordPress Backdoor未授权访问漏洞和信息泄露漏洞

    漏洞名称: WordPress Backdoor未授权访问漏洞和信息泄露漏洞 CNNVD编号: CNNVD-201312-497 发布时间: 2013-12-27 更新时间: 2013-12-27 危 ...

  9. sqliteExpert软件使用(创建数据库和表)

    sqliteExpert是sqlite数据库的可视化操作软件,通过该软件可以进行可视化的创建数据库以及表,免去了复杂的建表语句.首先在下面地址下载该软件http://www.ddooo.com/sof ...

  10. Hierarchy--分层。单词意思即为分层视图。

    英文释义:Hierarchy--分层.单词意思即为分层视图. 功能:层次Viewer允许你调试和优化您的用户界面.还可以学习别人做好的UI界面,它提供了一个布局的视图层次结构(布局视图)的视觉表现和放 ...