二、以下示例将返回行号为 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

转载于:https://www.cnblogs.com/b400800/p/4044177.html

分页存储过程--From:桌面备份 - sql2005新功能.docx相关推荐

  1. android mm 版本,多项新功能 傲游MM 2.1Android版本发布

    [IT168 资讯]今天,傲游手机浏览器(傲游MM)发布了最新的2.1版本,新版本增加了应用下载.桌面天气等新功能,并有数处细节更新.此次版本发布距离傲游MM2.0正式版发布仅两周,产品上的快速更新和 ...

  2. SQL2005结合ROW_NUMBER()高效分页存储过程

    SQL2005结合ROW_NUMBER()高效分页存储过程: CREATE PROCEDURE [dbo].[sp_Accounts_GetUserListPaged]     @PageIndex ...

  3. ASP.NET调用Oracle分页存储过程并结合ASPnetpager分页控件 实现分页功能

    之前用的是GridView自带的分页功能,那速度啊慢的真实不行  ,决定自定义分页  Oracle库里有5W多条数据 AspnetPager做的还是不错,拿过来用 Oracle 分页存储过程: cre ...

  4. 上传自定义日志_ZKEYS系统重磅更新,新增后台数据库备份、主控运行日志管理等新功能!...

    ZKEYS云管平台(大陆版)5.1.5版本震撼上线,新增后台备份数据库.后台主控运行日志管理.后台调试模式开关.后台设置Redis功能.定时任务查看管理功能.裸金属库存切换等大量新功能. 一.新增功能 ...

  5. SQL 2014新功能介绍系列3 - 备份还原篇

    大数据催生了云计算和移动互联的世界.微软新的战略方针"cloud first,mobilefirst"也表明公司正在全面转向云计算中转型.在最新发布的SQLServer 2014与 ...

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

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

  7. fedora30 桌面图标_Linux桌面上的创新:Fedora 30的新功能

    fedora30 桌面图标 Fedora Linux的最新版本已于4月底发布. 自2003年首次发布以来,作为Fedora的全职用户,自2007年以来一直是活跃的贡献者,我始终感到满意,看到社区中的新 ...

  8. linux mate主题目录,Linux Mint 19.1新功能介绍,包含Cinnamon、Xfce、MATE桌面

    Linux Mint 19.1(开发代号Tessa)是一个LTS长期支持版本,基于Ubuntu 18.04,采用Linux kernel 4.15内核,它附带了很多更新的软件,并带来了改进和许多新功能 ...

  9. ONLYOFFICE 桌面编辑器 v7.3 新功能介绍

    ONLYOFFICE 桌面编辑器版本 7.3 已经可以在 Windows.Linux 和 macOS 上使用.桌面版的大部分新功能与在线编辑器的相同,但桌面编辑器也带来了一些独特的功能,例如,新的打印 ...

最新文章

  1. JVM---运行时数据区概述
  2. Android一个完整的项目转成SDK提供给第三方嵌入
  3. linux c 删除非空目录
  4. HCIE培训后的面试小诀窍
  5. vb操作excel图表_EXCEL的简单介绍(嗯,文本版的)
  6. C++彩色数据流动界面
  7. VMware产品演示网站
  8. tomcat配置及遇到的问题
  9. 微信小程序picker-view中的view的高度修改问题,只能用px单位
  10. zmq xsub/xpub 实现消息订阅(一)
  11. 词性标注 python
  12. 计算机u盘病毒清除方式,彻底清除u盘病毒有什么方法呢
  13. quarters自动编译生成sof
  14. php 一天是多少秒,1天 等于 86400 秒?
  15. python实现Ensembl ID和gene symbol的相互转换
  16. 曾国藩《挺经》卷七英才
  17. dreamweaver快捷键大全
  18. MYSQL:时间粒度(每30s、每1分钟、每5分钟、每1小时、每1周、每1月、每1季度、每1年)
  19. vuejs 配置路由
  20. 【李刚-21天通关Python】第一章:Python入门与字符串

热门文章

  1. 不同版本的散点图矩阵
  2. 让R与Python共舞
  3. arduino数码管显示0到9_少儿Python程序第十二讲:单片机控制数码管
  4. 文字识别(三)--文字定位与切割
  5. 相机模型与标定(四)--opencv单目标定例子使用说明
  6. 汇编学习--7.12--总结
  7. PAT (Basic Level) Practice1011 A+B 和 C
  8. Mysql高可用设计入门
  9. flink入门案例之WordCount
  10. 无法初始化主类 flink.learn.bounded.WordCountJob