---恢复内容开始---

自己之前一直是使用的通用的存储过程 ,也是封装好的只要传表名 + 条件 等等 
来到新环境 让自己写一个存储过程, 没办法 自己就需要写一个咯 之前写的比较多的是 按 top 来分页 现在公司要求是使用Row_number 当然 后者效率还是高一点 。至于索引什么的 暂时还没有用到 (有什么需求 现学也是可以的)其中也有 with(nolock) 但是会容易造成数据脏读。如果你有用到索引 或者你想看到你的语句查询开销 你可以使用(ctrl+M)键调执行计划。至于你看到这些占用啥的 聚集索引什么的,懵了? 那就请你移驾自行查找(自己没有太懂,所以就不在这里板门弄斧了)。

 USE [JHMinGameDB]
GO
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: yanyunhai
-- Create date: 2016-04-13
-- Description: 新手送豆
-- =============================================
CREATE PROCEDURE [dbo].[Web_Active_Buyu_CardLog_page] --创建该存储过程名字(如已经存在 要改的时候就把 create 变成 Alter)
@State int,
@startTime datetime,
@endTime datetime,
@pageSize int,
@pageIndex int,
@recd int output,--输出参数
@totalpeas int output --输出参数 AS
set @recd=0 --赋值为0是避免查询结果为0 时 显示为null
set @totalpeas=0
Declare @recdst int=0,@recdend int=0 --@recdst起始条数
Set @recdst=@pageSize * (@pageIndex-1)+1 -- @recdend 结束条数
Set @recdend=@pageSize + @recdst-1
BEGIN
--在对于时间判断时建议 少用 between and 因为 0:00-23:59
declare @SumNum1 int,@SumNum2 int,@SumNum3 int
select @SumNum1=COUNT(*) from Active_CardLog with(nolock) where [State]=0
select @SumNum2=COUNT(*) from Active_CardLog with(nolock) where [State]=1
select @SumNum3=COUNT(*) from Active_CardLog with(nolock) where [State]=1 and UpTime>=@startTime and UpTime<@endTime if @State>=0
begin
select row_number() over(order by UpTime desc) as rowid,a.id,CardID, CardPwd, CardNum, State, UserID, IP, UpTime, CreateTime,b.myname into #tmp from Active_CardLog a
left join JH_member b on b.idx=a.UserID
where State=@State --and UpTime>=@startTime and UpTime<@endTime select @totalpeas=isnull(SUM(CardNum),0),@recd=count(1) from #tmp
select rowid,CardID, CardPwd, CardNum, State, UserID, IP, UpTime, CreateTime,myname,@totalpeas sumnum,@recd sumRowID,@SumNum1 SumNum1,@SumNum2 SumNum2,@SumNum3 SumNum3 from #tmp
where rowid between @recdst and @recdend --根据rowid 来确定显示区间
drop table #tmp
end
else if @State<0
begin
select row_number() over(order by UpTime desc) as rowid,a.id,CardID, CardPwd, CardNum, State, UserID,
IP, UpTime, CreateTime,b.myname into #temp from Active_CardLog a
left join JH_member b on b.idx=a.UserID
where UpTime>=@startTime and UpTime<@endTime select @totalpeas=isnull(SUM(CardNum),0),@recd=count(1) from #temp
where rowid between @recdst and @recdend --根据rowid 来确定显示区间
drop table #temp
end
END
--其实上问可以用不用判断也可以解决这个问题 那就是用 where(([State]=2)or([State]=@state))
--有人在使用时 会出现 Rowid 报错?自己找找子查询
GO

——————– with (nolock)—-数据多的时候可以《索引之后的选择》—————– 
使用情况: 当我们在下SQL Command时,在语法中加一段WITH (NOLOCK)可以改善在线大量查询的环境中数据集被LOCK的现象藉此改善查询的效能。 
不过有一点千万要注意的就是,WITH (NOLOCK)的SQL SELECT有可能会造成数据脏读。 
用法:select * from table with(nolock) left join table with(nolock) 表名后面接上 with (nolock) 
注意事项:①也就是说当使用NoLock时,它允许阅读那些已经修改但是还没有交易完成的数据。因此如果有需要考虑transaction事务数据的实时完整性时,使用WITH (NOLOCK)就要好好考虑一下 
②:with(nolock)的写法非常容易再指定索引。 
跨服务器查询语句时 不能用with (nolock) 只能用nolock 
同一个服务器查询时 则with (nolock)和nolock都可以用 
比如: 
select * from [IP].a.dbo.table1 with (nolock) 这样会提示用错误 
select * from a.dbo.table1 with (nolock) 这样就可以 
 当然 你也可以看看 over() 开窗函数

其中的一些东西也是看前一任 程序员写的, 然后就有在园子里面看看介绍。 自己摘了一部分 因为看别人的东西的时候也没有做到用怀疑的态度去看 去分析 所以贴出来 。如果你看到以后有错误 有误区 欢迎指正!! 
对你的能力是一次证明, 对我是一次帮助。 虚心求学。

存储过程 Row_number() 分页的更多相关文章

  1. 最通用的ibatis.Net使用sql server存储过程返回分页数据的详细例子

    ibatis.Net是一个比较简单和灵活的ORM框架,今天我分享一个我的项目中使用sql server通用存储过程来分页的一个例子,用ibatis.Net框架统一返回分页数据为IList<Has ...

  2. 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题

    最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...

  3. ROW_NUMBER分页的注意事项

    之前在使用ROW_NUMBER分页获取数据的时候,直接用ROW_NUMBER里的SELECT语句查出了所有的数据. like this: select * from ( select row_numb ...

  4. 使用Row_Number()分页优化

    记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题   最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且 ...

  5. 基于Jquery+Ajax+Json+存储过程 高效分页

    在做后台开发中,都会有大量的列表展示,下面给大家给大家分享一套基于Jquery+Ajax+Json+存储过程高效分页列表,只需要传递几个参数即可.当然代码也有改进的地方,如果大家有更好的方法,愿留下宝 ...

  6. SQL Server的分页优化及Row_Number()分页存在的问题

    最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...

  7. mssql Row_Number() 分页 DISTINCT 问题

    转载原文地址http://www.cnblogs.com/pumaboyd/archive/2008/04/20/1162376.html 这周碰到了很多奇怪的问题,有些是莫名的低级错误,有些这是一直 ...

  8. 【转】记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题

      最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServe ...

  9. sql server row_number分页

    row_number分页 SELECT  TOP 10* --pageSize =10FROM (  SELECT    *, row_number () OVER (ORDER BY a.bsqID ...

随机推荐

  1. hibernate主键生成策略

    在hibernate中,提供了多种主键生成器(不同的数据库,不同的表结构使用的主键生成策略也不相同),查阅相关资料经过实验总结如下: 1.increment 主键按照数值顺序递增,使用当前实例中最大值 ...

  2. UltralEdit 替换tips

    UltralEdit的字符串替换,简直是编辑器的神来之笔! 可以通过 搜索--〉替换 菜单调出,也可以使用 Ctrl+R 快捷键 下面来看字符的表示吧: tab可以直接Tab键(可能不成功,因为被用作 ...

  3. 【BZOJ-1656】The Grove 树木 BFS + 射线法

    1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 186  Solved: 118[Su ...

  4. 基于Dubbo框架构建分布式服务(二)

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> ...

  5. vector - vector product

    the inner product Givens two vectors \(x,y\in \mathbb{R}^n\), the quantity \(x^\top y\), sometimes c ...

  6. python之生成器

    def repeater(value): while True: new = yield value print(first, new) if new is not None: value = new ...

  7. MySQL存储引擎--MyISAM与InnoDB区别

    InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISA ...

  8. opencv_判断两张图片是否相同

    QQ:231469242 pip install opencv 如果找不到版本,去非官方下载opencv第三方包http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下 ...

  9. Css3阴影实例

    阴影大约从CSS2就开始有了,但是只有Safari一个浏览器支持它,到现在依然是这样.阴影在CSS3中可以应用在边框和文字上,就像图片的阴影效果一样.一般可以分为: box-shadow textsh ...

  10. Linux下数据恢复软件extundelete

    extundelete软件专门解决意外删除事件的,有时候不小心 rm -rf * 就可能毁掉有用的数据.因此就出现了这个恢复工具,但这个工具也不是万能的,删除数据后一定要停止所以的写操作.以免Inod ...