mssql分页存储过程
本文转自百度文库http://wenku.baidu.com/view/8f6ec149fe4733687e21aa72.html
必须有主键
原代码

Codeuse users
go if exists(select name from sysobjects where name='pages' and xtype='p')
drop proc pages
go CREATE PROC pages
@tblName varchar(255), -- 表名
@strGetFields varchar(1000), -- 需要返回的列
@fldName varchar(255), -- 排序的字段名
@PageSize int, -- 多少条/页
@PageIndex int, -- 页码
@doCount bit, -- 返回记录总数, 0不返回,1返回
@OrderType bit, -- 设置排序类型, 0升序,1降序
@strWhere varchar(1500) -- 查询条件 (注意: 不要加 where)
AS declare @strSQL varchar(5000) --主语句
declare @strTmp varchar(150) --临时变量
declare @strOrder varchar(400) --排序类型 --如果@doCount传递过来的不是0,就执行总数统计。
if @doCount != 0
begin
--查询条件为空
set @strSQL = 'select count(*) as Total from ' + @tblName
--查询条件不为空
if @strWhere !=''
set @strSQL = 'select count(*) as Total from ' + @tblName + ' where '+@strWhere
end --以下的所有代码都是@doCount为0的情况:
--如果@OrderType是1,就执行降序,否则为升序!
else
begin
--查询条件为空
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @fldName +' asc'
--查询条件不为空
if @OrderType = 1
begin
set @strTmp = '<(select min'
set @strOrder = ' order by ' + @fldName +' desc'
end --如果是第一页就执行代码,这样会加快执行速度
if @PageIndex = 1
begin
--查询条件为空
set @strSQL='select top '+str(@PageSize)+''+@strGetFields+' from '+@tblName+''+@strOrder
--如果查询条件不为空,
if @strWhere != ''
set @strSQL='select top '+str(@PageSize)+''+@strGetFields+' from '+@tblName+' where '+@strWhere+''+@strOrder
end
--如果不是第一页,则
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码 --sql查询语句
set @strSQL = 'select top ' + str(@PageSize) +''+@strGetFields+ ' from '
+ @tblName + ' where ' + @fldName + '' + @strTmp + '('
+ @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ''
+ @fldName + ' from ' + @tblName + '' + @strOrder + ') as tblTmp)'+ @strOrder --如果查询条件不为空,则另写sql语句
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +''+@strGetFields+ ' from '
+ @tblName + ' where ' + @fldName + '' + @strTmp + '('
+ @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ''
+ @fldName + ' from ' + @tblName + ' where ' + @strWhere + ''
+ @strOrder + ') as tblTmp) and ' + @strWhere + '' + @strOrder
end
end
exec (@strSQL)
GO --运行存储过程pages
--表名varchar,要返回的列名(*为返回所有)varchar,排序的列varchar,每页显示数量int,
--第几页int,是否统计总数bit,是否降序排列bit,排列条件(不要带where)varchar --统计borrow表的记录数量
exec pages 'uu','*','',0,0,1,0,''
--按borrowid排倒序分别显示1、2、3页的信息
exec pages 'uu','*','uid',4,1,0,1,''
exec pages 'uu','*','uid',4,2,0,1,'uid is not null'
exec pages 'uu','*','uid',4,3,0,1,''
简单改造,调整了参数的顺序,重新进行了命名,以符合的我的使用习惯
if exists(select name from sysobjects where name='pages' and xtype='p')
drop proc pages
go CREATE PROC pages
@bit_DoCount BIT , -- 返回记录总数, 0不返回,1返回
@str_tblName varchar(255), -- 表名
@str_SelectFields varchar(1000), -- 需要返回的列(所有字段*)
@str_Where varchar(1500), -- 查询条件 (注意: 不要加 where)
@str_PkField varchar(255), --主键名称(决定着取出来的记录)
@bit_OrderType bit, -- 设置排序类型, 0升序,1降序
@int_PageSize int, -- 多少条/页
@int_PageIndex int -- 页码
AS declare @strSQL varchar(5000) --主语句
declare @strTmp varchar(150) --临时变量
declare @strOrder varchar(400) --排序类型 --如果@doCount传递过来的不是0,就执行总数统计。
if @bit_DoCount != 0
begin
--查询条件为空
set @strSQL = 'select count(*) as Total from ' + @str_tblName
--查询条件不为空
if @str_Where !=''
set @strSQL = 'select count(*) as Total from ' + @str_tblName + ' where '+@str_Where
end --以下的所有代码都是@doCount为0的情况:
--如果@OrderType是1,就执行降序,否则为升序!
else
begin
--查询条件为空
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @str_PkField +' asc'
--查询条件不为空
if @bit_OrderType = 1
begin
set @strTmp = '<(select min'
set @strOrder = ' order by ' + @str_PkField +' desc'
end --如果是第一页就执行代码,这样会加快执行速度
if @int_PageIndex = 1
begin
--查询条件为空
set @strSQL='select top '+str(@int_PageSize)+' '+@str_SelectFields+' from '+@str_tblName+' '+@strOrder
--如果查询条件不为空,
if @str_Where != ''
set @strSQL='select top '+str(@int_PageSize)+' '+@str_SelectFields+' from '+@str_tblName+' where '+@str_Where+' '+@strOrder
end
--如果不是第一页,则
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码 --sql查询语句
set @strSQL = 'select top ' + str(@int_PageSize) +' '+@str_SelectFields+ ' from '
+ @str_tblName + ' where ' + @str_PkField + '' + @strTmp + '('
+ @str_PkField + ') from (select top ' + str((@int_PageIndex-1)*@int_PageSize) + ' '
+ @str_PkField + ' from ' + @str_tblName + '' + @strOrder + ') as tblTmp)'+ @strOrder --如果查询条件不为空,则另写sql语句
if @str_Where != ''
set @strSQL = 'select top ' + str(@int_PageSize) +' '+@str_SelectFields+ ' from '
+ @str_tblName + ' where ' + @str_PkField + '' + @strTmp + '('
+ @str_PkField + ') from (select top ' + str((@int_PageIndex-1)*@int_PageSize) + ' '
+ @str_PkField + ' from ' + @str_tblName + ' where ' + @str_Where + ' '
+ @strOrder + ') as tblTmp) and ' + @str_Where + ' ' + @strOrder
end
end
PRINT @strSQL
exec (@strSQL)
GO
mssql分页存储过程的更多相关文章
- SQL Server 2008 通用分页存储过程
1.alert USE [数据库名称] GO /****** Object: StoredProcedure [dbo].[dbTab_PagerHelper] Script Date: 08/22/ ...
- mssql sqlserver存储过程专题
MSSQL存储过程简介及创建方式 mssql_DB_存储过程类型简介 MSSQL sql存储过程创建简介及应用举例 MSSQL SQl server 2008 CLR 存储过程创建举例 MSSQL ...
- 完整的分页存储过程以及c#调用方法
高效分页存储过程 USE [db] GO /****** 对象: StoredProcedure [dbo].[p_Page2005] 脚本日期: // :: ******/ SET ANSI_NUL ...
- 1、SQL可搜索可排序可分页存储过程, 2、范围内的随机时间 适用于sql 2008以上
-- ============================================= -- Author: 蜘蛛王 -- Create date: 2015-10-29 -- Descri ...
- sql server 分页存储过程
----------------------分页存储过程------------------------------------------------------------------------ ...
- MYSQL分页存储过程及事务处理
最近给客户做的一小系统是SQLSERVER的数据库,因为特殊原因要切换到MYSQL上去,切换数据库确实让人头疼的,SQLSERVER和MYSQL的存储过程还是有很大差别的,下面是我做切换时转换的MYS ...
- SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)
SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程,支持单表或多表结查集分页,存储过程如下: /******************/ --Author:梦在旅 ...
- C#调用SQL Server分页存储过程
以SQL Server2012提供的offset ..rows fetch next ..rows only为例 e.g. 表名:Tab1 ------------------------------ ...
- 简单的分页存储过程,Json格式日期转换为一般日期
简单的分页存储过程 CREATE PROC Paged @pageIndex INT, @pageCount INT OUTPUT, @pageSize INT AS DECLARE @count I ...
随机推荐
- [MySQL] SqlServer 迁移到 MySQL 方法介绍
一.原则: 只迁移表结构和数据,存储过程.函数.触发器尽量自己改写,并充分测试. 迁移前,先设置好数据库的一些参数,比如默认存储引擎,默认编码等,方便后续导入. 二.方法: 1.使用MySQL Wor ...
- printf 整数类型都用 uint8_t
#include <iostream> #include <string> #include <tuple> #include <utility> ...
- Stanford NLP 学习笔记2:文本处理基础(text processing)
I. 正则表达式(regular expression) 正则表达式是专门处理文本字符串的正式语言(这个是基础中的基础,就不再详细叙述,不了解的可以看这里). ^(在字符前): 负选择,匹配除括号以外 ...
- java获取当前日期等以及时区
代码: public static void main(String[] args) throws Exception{ /* * 获取当前时间的办法 */ //这个获取从1970年..直到现在的毫秒 ...
- js运动框架之掉落的扑克牌(重心、弹起效果)
玩过电脑自带纸牌游戏的同志们应该都知道,游戏过关后扑克牌会依次从上空掉落,落下后又弹起,直至"滚出"屏幕. 效果如图: 这个案例的具体效果就是:点击开始运动,纸牌会从右上角掉 ...
- logback
logback:入口: private final static Logger logger = org.slf4j.LoggerFactory.getLogger(ServiceTest.class ...
- Round() 四舍五入 js银行家算法(转)
首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825; ...
- 从零开始系列--R语言基础学习笔记之一 环境搭建
R是免费开源的软件,具有强大的数据处理和绘图等功能.下面是R开发环境的搭建过程. 一.点击网址 https://www.r-project.org/ ,进入"The R Project fo ...
- 尝试打开或创建物理文件 REATE FILE 遇到操作系统错误 5(拒绝访问)
尝试打开或创建物理文件 'E:\Library.mdf' 时,CREATE FILE 遇到操作系统错误 5(拒绝访问.). 最佳回答: 这是因为SQL Server的启动帐户(一般是system或某个 ...
- 转《UNIX编程艺术》读书心得
花了一段时间看完了<UNIX编程艺术>,但不是看得特别仔细,尤其是后面作者通过对工具的讲解来阐述其设计思想,因为很多工具能未曾接触过,难免就会产生一些乏味的感觉.其实就像译者姜宏在译序里说 ...