一个不错的SQL储存过程分页,储存过程+Repeater,如果只是浏览数据的话,快就一个字

CREATE PROCEDURE SelectPagedSQL
(
 @SQL nvarchar(512),
 @IndexField nvarchar(100),
 @PageSize int=10,
 @PageIndex int=1,
 @Sort nvarchar(128)=@IndexField,
 @TotalCount int=0 output
)
 AS
declare @strSQL nvarchar(1024)

set nocount on 
set @strSQL=' 
select @TotalCount=count(*) from ('+@SQL+') as t ' 
exec sp_executesql 
@strSQL, 
N'@TotalCount int=0 OUTPUT', 
@TotalCount=@TotalCount OUTPUT 

declare @ItemCount int 
set @ItemCount=@TotalCount-@PageSize*@PageIndex 
if(@ItemCount<0) 
set @ItemCount=@ItemCount+@PageSize 
else 
set @ItemCount=@PageSize 

if(@ItemCount<0)return 1 

set @strSQL='SELECT * FROM 
(SELECT TOP '+str(@ItemCount)+' * FROM 
(SELECT TOP '+str(@PageSize*@PageIndex)+' * FROM 
('+@SQL+') AS t0 
ORDER BY '+@IndexField+' ASC) AS t1 
ORDER BY '+@IndexField+' DESC) AS t2 
ORDER BY ' +@Sort 


exec sp_executesql 
@strSQL 


GO
----------------------------------

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

createPROCEDURE CommGetRecordByPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 主键字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsReCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(100) -- 临时变量
declare @strOrder varchar(400) -- 排序类型

if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end

set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder

if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

if @PageIndex = 1
begin
set @strTmp =''
if @strWhere != ''
set @strTmp = ' where ' + @strWhere

set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
end

if @IsReCount != 0
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+' where ' + @strWhere

exec (@strSQL)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

这个也不错啊

posted on 2007-08-05 09:40 江宇旋 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/jiangyuxuan/archive/2007/08/05/843463.html

一个不错的SQL储存过程分页,储存过程+Repeater,如果只是浏览数据的话,快就一个字...相关推荐

  1. 第六章SQL数据库开发--TSQL—储存过程

    第六章SQL数据库开发--TSQL-储存过程 6.1 TSQL-存储过程说明 存储过程 (Stored Procedure) 是在大型数据库系统中 , 一组为了完成特定功能的 SQL 语句集 , 存储 ...

  2. oracle ajax储存过程分页,创建 Oracle 分页存储过程

    1.创建Oracle包的定义.使用 REF CURSOR 数据类型来处理 Oracle 结果集.REF CURSOR 是一个指向 PL/SQL 查询所返回的结果集的指针.与普通的游标不同,REF CU ...

  3. MYSQL储存过程和储存函数和变量

    储存过程和储存函数和变量 变量的应用: 变量分类为: 系统变量和自定义变量 系统变量和全局变量还可以细分: 系统变量分类: 全局变量和会话变量 自定义变量分类: 用户变量和局部变量 下面是变量的一些具 ...

  4. mysql json储存过程_SQL-mysql储存过程

    一 前言 本篇内容是关于mysql储存过程的知识,学习本篇的基础是知识追寻者之前发过的文章(公众号读者看专辑) <SQL-你真的了解什么SQL么?> <SQL-小白最佳入门sql查询 ...

  5. [导入]SQL 分页存贮过程

    SQL 分页存贮过程 文章来源:http://blog.csdn.net/vainnetwork/archive/2007/08/18/1749314.aspx 转载于:https://www.cnb ...

  6. mysql的储存原理_mysql储存原理

    如大家所知道的,Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE. 那么,这几种索引有什么功能和性能上的不同呢? FULLTEXT 即为全文索引,目前只有MyI ...

  7. 在SQL Server中分页结果的最佳方法是什么

    如果您还希望获得结果总数(在进行分页之前),那么在SQL Server 2000.2005.2008.2012中对结果进行分页的最佳方法是(性能明智的)? #1楼 最终, Microsoft SQL ...

  8. 因为一个bug来深入探讨下分页插件PageHelper

    事情来源是这样的,因为某些操作失误,在使用分页插件pageHelper时,因为这样一句不起眼的操作,竟然引发了一系列的灾难,下面来看下灾难的由来: Page localPage = PageHelpe ...

  9. redis储存方式以及储存数据

    redis储存方式以及储存数据介绍 Redis数据基础类型有哪些? string 普通key:value储存set name xiaoliget name--->xiaoli list 有序可以 ...

最新文章

  1. mysql的索引的区别_MYSQL索引区别
  2. 暂时放在首页,因为需要大家帮忙!!
  3. 如何防御syn flood的一些思路!
  4. Linux一个命令创建多个目录:seq命令
  5. Eclipse Windows环境配置
  6. 在python中sqrt是什么意思_python中sqrt是什么意思
  7. LeetCode 144 ——二叉树的前序遍历
  8. 面试官:你能说清楚分布式锁,进程锁,线程锁的区别吗?
  9. 强强联合!蚂蚁金服与新炬网络战略合作,共同致力于国产数据库的技术推广和生态建设
  10. turf.js API功能讲解
  11. Python数据分析师使用低代码Streamlit实现Web数据可视化方法——入门篇
  12. 客户细分_客户细分初学者指南
  13. 如何在idea中高效地使用和查找TODO标签
  14. CSS3 的动画应用
  15. 【2023团体程序设计天梯赛CCCC】GPLT2023,L1~L2部分(PTA,L1-089~L1-096,L2-045~L2-048)题解代码复盘
  16. 什么是独享锁/共享锁_java培训
  17. Word2vec原理与应用
  18. 基本的信号——冲激信号与冲激序列
  19. 2017四月TOP100电商类App排行榜出炉
  20. 服务器网站环境包,使用wips网站环境包的案例

热门文章

  1. windows环境给redis配置密码
  2. MATLAB有关数字信号处理的一些方法
  3. vue取通过key取value_vue怎么获取radio、checkbox选中的值
  4. python打开文件并读取2进制_在Python中,哪些文件可以读取为文本,哪些文件可以读取为二进制?...
  5. 1.1.3 计算机的分类与发展方向(电子计算机、计算机按指令和数据流分类、计算机发展趋势正向着“两级”分化)
  6. python 天气预报 mysql_Python+PyQt5+MySQL实现天气管理系统
  7. WebRTC / Jitsi / 架构
  8. 启明云端分享|ESP8089 pin to pin 替代RTL8189,供应稳定、性价比高!
  9. 支持自定义的离线语音模块WT516P6Core 串口协议使用说明
  10. 触摸屏通常接在微型计算机,计算机应用基础习题答案.doc