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 ...
随机推荐
- npm命令集合
1.npm初始化项目:npm init 或者 npm init --yes 生产 package.json文件 2.下载package.json安装包: npm install 缩写 npm i
- Taro聊天室|react+taro仿微信聊天App界面|taro聊天实例
一.项目简述 taro-chatroom是基于Taro多端实例聊天项目,运用Taro+react+react-redux+taroPop+react-native等技术开发的仿微信App界面聊天室,实 ...
- 一个匹配字字符串是aabbcc或者其他模式的运用
<!--一个匹配字字符串是aabbcc或aaaabccc或者其他模式的运用--> function isPattern(str, pattern) { let str_a = str.sp ...
- Javascript中的几种函数
(1)普通函数:这种函数是我们日常使用中用的最多的,用function关键字定义的函数.这也是符合多种语言定义的. function foo(){ // code } (2)箭头函数:用=>运算 ...
- mysql 容灾备份
跨服务器备份: 服务器A:192.168.5.193 测试数据库TestDB 服务器B:192.168.5.194 目标:将服务器A上的测试数据库定时备份到服务器B中 需要技术:mysqldump + ...
- MYSQL第二课
创建数据库: 输入:CREATE DATABASE itcase;计算机输出: Query OK, 1 row affected 查看数据库:输入:SHOW DATABASES;计算机输出: +--- ...
- 关于APICloud与DCloud的我的一些看法
最近因为项目需要,研究了一下市场较为流行的四种移动开发平台:Wex5.APPcan.Dcloud.APICloud,Wex5因为界面UI较为老旧,且语法和js有较大出入,APPcan不开源等缘故,主要 ...
- 【CobaltStrike】对CobaltStrike内置功能模块的了解
对CobaltStrike内置功能模块的了解 0x00 右键功能列表 Interact 打开beacon Access dump hashes 获取hash Elevate 提权 Golden Tic ...
- -bash: /home/java/jdk1.8.0_221/bin/java: 权限不够
1)进入存放jdk文件的文件夹路径我这里是 usr/local/jdk/2)输入命令 chmod 777 jdk1.8.0_221/bin/java修改权限3)再次输入 java -version 成 ...
- Tomcat相关目录及配置文件
目录结构 [root@localhost tomcat]# tree -L 1.├── bin├── BUILDING.txt├── conf├── CONTRIBUTING.md├── lib├── ...