SQLServer 高效 分页存储过程
/**********************************************************************
参数:@PrimaryKey 主键,@OrderBy 排序字段,@SqlStr sql语句,@PageSize 每页显示的记录,@PageIndex 当前页(从0开始)
***********************************************************************/
ALTER procedure [dbo].[PageQuery]
@PrimaryKey varchar(100),--主键
@OrderBy varchar(100),--排序字段
@SqlStr varchar(8000),--sql语句
@PageSize int,--每页显示的记录
@PageIndex int--当前页(从1开始)
--@RecordCount int output --返回的总记录数
as
declare @ExecSql varchar(8000)--要执行的Sql组合
if @OrderBy=''
set @OrderBy='order by '+@PrimaryKey+' asc'
else if (len(@OrderBy)<8 or upper(substring(@OrderBy,1,8))<>'ORDER BY')
set @OrderBy='order by '+@OrderBy
if @PageSize=-1--用于ajax的第一次查询
set @PageSize=0
set @PageIndex=@PageIndex-1
print('-----'+CAST(@PageIndex as varchar(10)) )
begin
declare @recordCount int,@pageCount int
declare @s nvarchar(4000)
set @s = N'select @recordCount = count('+@PrimaryKey+') from ('+@SqlStr+') TN'
exec sp_executeSql @s,N'@recordCount int output',@recordCount output
if(@pageSize>0)
set @pageCount = (@recordCount - 1 + @PageSize) / @PageSize;--总页数
else
set @pageCount = 0;--总页数
if @PageIndex<=0--如果是第一页就执行这个
begin
set @ExecSql='select top '+cast(@PageSize as varchar(100))+' * from ('+@SqlStr+') T '+@OrderBy
end
else
begin
if charindex('2000 - 8.00.',@@version)>0
begin
set @ExecSql=
'select top '+cast(@PageSize as varchar(100))+' *
from ('+@SqlStr+') as T where T.'+@PrimaryKey+' not in
(select top '+cast((@PageSize*@PageIndex) as varchar(100))+' '+@PrimaryKey+'
from ('+@SqlStr+') T2 '+@OrderBy+') '+ @OrderBy
end
else
begin
set @ExecSql=
'select * from
(
select * from
(SELECT *, #RowNum#=ROW_NUMBER() OVER('+@OrderBy+') FROM ('+@SqlStr+') T1) T2 where T2.#RowNum#>='+cast(@PageSize*@PageIndex+1 as varchar(10))+' and T2.#RowNum#<='+cast(@PageSize*(@PageIndex+1) as varchar(10))+'
) T3
'
end
end
exec (@ExecSql+' select '+@recordCount+' as RecordCount,'+@pageCount+' as PageCount ')
end
SQLServer 高效 分页存储过程的更多相关文章
- sql server 2000 单主键高效分页存储过程 (支持多字段排序)
sql server 2000 单主键高效分页存储过程 (支持多字段排序) Create PROC P_viewPage /* nzperfect [ ...
- SQLserver 的分页存储过程
-- 1.建立修改学生数据的存储过程 -- 2.建立根据班级Id和学生姓名模糊查询的分页存储过程,要求正确输出总记录数,总页数-- (输入班学生姓名 计算总记录数 计算总页数) -- @name ...
- SQlserver高效分页,还在使用row_number(),top之类的?
row_number() ,还是top 这些分页的方法比较老了,效率不是很高效的, Sqlserve2012就有了,效率对比比较明显,尤其是数据比较大的情况下(我们可以观看查询执行计划) Offset ...
- sqlserver 通用分页存储过程(转)
USE [AAA_TYDC] GO /****** Object: StoredProcedure [dbo].[proc_DataPagination] Script Date: 11/20/201 ...
- sqlserver 通用分页存储过程
来源:http://www.jb51.net/article/19936.htm CREATE PROCEDURE commonPagination ), --要显示的列名,用逗号隔开 ), --要查 ...
- 【转】ASP.NET 高效分页存储过程
代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-- ...
- oracle高效分页存储过程(百万数据级)
create or replace procedure Pager( page in number,--数据页数,从1开始 pageSize in number,--每页大小 tableName nv ...
- 高效sql2005分页存储过程
高效分页存储过程 --分页存储过程示例 Alter PROCEDURE [dbo].[JH_PageDemo] @pageSize int = 9000000000, @pageIndex int = ...
- 完整的分页存储过程以及c#调用方法
高效分页存储过程 USE [db] GO /****** 对象: StoredProcedure [dbo].[p_Page2005] 脚本日期: // :: ******/ SET ANSI_NUL ...
随机推荐
- iOS中的NSOperation线程
1.除NSThread之外的第二种多线程的编程方法 2.采用NSOperation(线程操作,通常用他的子类)和NSOperationQueue(线程队列)搭配来做多线程开发,采用NSOperat ...
- Material 风格的搜索框MaterialSearchView的使用
大多数App中都有搜索的功能,虽然国内实实在在的遵循Google material design设计语言来设计的App实在不多,但个人感觉MD真的是非常值得研究,这次给大家介绍的是 Material ...
- swift(四)swift的广义匹配
//swift的广义匹配 let x = switch x { ...: println("个位数") ...: println("十位数") default: ...
- Linux中fdisk分区
一.硬盘接口 从整体的角度上,硬盘接口分为IDE.SATA.SCSI和SAS四种,IDE接口硬盘多用于家用产品中,也部分应用于服务器,SCSI接口的硬盘则主要应用于服务器市场,而SAS只在高端服 ...
- Flask Rest接口
Flask适用于简单的接口请求 安装 pip install Flask pip install Flask-RESTful 仅简单请求url,然后出发处理程序,返回处理结果 app.py代码如下 f ...
- golang数据结构和算法之CircularBuffer环形缓冲队列
慢慢练语法和思路, 想说的都在代码及注释里. CircularBuffer package CircularBuffer const arraySize = 10 type CircularBuffe ...
- python获取某路径下,某种特定类型的文件名称,os.walk(路径)生成器;os.listdir(路径),os.path.splitext(名称),os.path.join(路径,名称),os.path.isdir(路径\名称)
#获取某文件夹下制定类型文件# import os# def filep(fp):# l=[]# a=os.walk(fp) #生成器# for nowp,sonp,oth in a: #当前目录,子 ...
- SpringCloud学习笔记(八、SpringCloud Bus)
目录: 什么是bus消息总栈 如何使用bus消息总栈 什么是bus消息总栈 SpringCloud Bus使用轻量的消息代理连接分布式系统的各个节点,可以用于系统状态变更时的广播(如配置变更)或其它管 ...
- Linux中自旋锁
传统的spinlock Linux的的内核最常见的锁是自旋锁.自旋锁最多只能被一个可执行线程持有.如果一个执行线程试图获得一个被已经持有(争用)的自旋锁,那么该线程就会一直进行忙循环-旋转-等待锁重新 ...
- calcifications loss
import keras import tensorflow as tf from keras.models import Model from keras import backend as K # ...