下面的分页存储过程不是太明白???

xinqq163 2010-09-08 09:53:34
ALTER procedure [dbo].[proc_GetEntireActioncomsumes]
@cemeteryid bigint,
@begin int,
@end int
as begin
select count(*) as records from actionconsumec inner join
actionconsumecc on actionconsumec.actionid=actionconsumecc.actionid
where actionconsumec.cemeteryid=@cemeteryid and dateadd(d,-3,consumerTime)<=getdate()

select * from (select actionconsumec.actionid,actionconsumec.consumerTime,
actionconsumecc.shopname,actionconsumec.subusername,actionconsumec.totalmoney,actionconsumec.userid,actionconsumec.username,
row_number() over(order by actionconsumec.consumerTime desc) as aId from actionconsumec inner join actionconsumecc on
actionconsumec.actionid=actionconsumecc.actionid and actionconsumec.cemeteryid=@cemeteryid
and dateadd(d,-3,consumerTime)<=getdate()) as actions
where actions.aId> @begin and actions.aId<=@end
end
下面的分页存储过程不是太明白??? 希望高手帮忙下。谢谢
第一点不明白 有两个选择语句 select count(*) as records 和下面的也有select ??
第2点不明白 row_number() over(order by actionconsumec.consumerTime desc) 这个是什么意思呢?
第3点 where actions.aId> @begin and actions.aId<=@end

更希望能全部语句详细所有意思了? 再谢谢
...全文
118 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyq29 2010-09-08
  • 打赏
  • 举报
回复
这个存储过程 传递的不是页码和pagesize

是两个参数 begin 和 end , 我估计你看不懂了

这两个参数 其实应该在存储过程里根据传递的页码和pagesize 自己进行计算的


里面的select 实际就是多生成一个新的序号1 2 3 4 。。。 over 控制按什么字段 降序 升序 排这个新序号

begin和end 就是 开始的序号和结束的序号位置


比如每页是10条 取第一页 就是取序号1-10

第二页就是11-20 你的begin就是10 end就是20

这里begin end 是你在程序里算好的 传值进来(看你的程序代码)


lishuai1030 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ysn1314 的回复:]
第一点 两个SELECT 一个返回总纪录数 一个返回结果集
第二点 ROW_NUMBER() 是SQL05特性 行索引 1 2 3 4 5行这样子 括号是里面是排序字段
第三点 是起始跟结束纪录 aID就是前面获取的ROW_NUMBER() 其实这边用BETWEEN AND更好点
[/Quote]


这个……
闲游四疯 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 liaohongchu 的回复:]
第一点 两个SELECT 一个返回总纪录数 一个返回结果集
我明白是这样选择,但为什么有两条语句的 ,这个返回总纪录数 好象没有用到的是不是多余了???

第二点 ROW_NUMBER() 是SQL05特性 行索引 1 2 3 4 5行这样子 括号是里面是排序字段
这个我明白了 谢谢

第三点 是起始跟结束纪录 aID就是前面获取的ROW_NUMBER() 其实这边用BETWEEN ……
[/Quote]
刚才没注意看
注意 这边总纪录数不是多余 因为你查询的结果集是当前页数据 而你前台页面分页肯定会用到总纪录数
闲游四疯 2010-09-08
  • 打赏
  • 举报
回复
其实你看不明白 去T-SQL中执行语句 看结果就都明白了
还不明白的话 还是老老实实SQL书拿出来学
闲游四疯 2010-09-08
  • 打赏
  • 举报
回复
row_number() over(order by actionconsumec.consumerTime desc) as aId
将自增列命名为aID 如果还不大明白 在TSQL随便找个表 SELECT ROW_NUMBER() as aID,* FROM TABLE 看结果 就知道了
from 没什么好说的 就是查询表
括号里面 返回一个表结果集 命名为 as actions
and dateadd(d,-3,consumerTime)<=getdate()) as actions
第一个from查询这个新声明的表 第二个from查询真实的表
如果还不明白 将查询语句拆开来看
select actionconsumec.actionid,actionconsumec.consumerTime,
actionconsumecc.shopname,actionconsumec.subusername,actionconsumec.totalmoney,actionconsumec.userid,actionconsumec.username,
row_number() over(order by actionconsumec.consumerTime desc) as aId from actionconsumec inner join actionconsumecc on
actionconsumec.actionid=actionconsumecc.actionid and actionconsumec.cemeteryid=@cemeteryid
and dateadd(d,-3,consumerTime)<=getdate() 括号里面算一个
括号外面再算另一个
xinqq163 2010-09-08
  • 打赏
  • 举报
回复
恩 注意了一下 第3点的有点明白了,刚才没有注意看 over(order by actionconsumec.consumerTime desc) as aId 这个是独立的字段的, 还有第一点不是很清楚。 大家在帮看看
xinqq163 2010-09-08
  • 打赏
  • 举报
回复
第一点 两个SELECT 一个返回总纪录数 一个返回结果集
我明白是这样选择,但为什么有两条语句的 ,这个返回总纪录数 好象没有用到的是不是多余了???

第二点 ROW_NUMBER() 是SQL05特性 行索引 1 2 3 4 5行这样子 括号是里面是排序字段
这个我明白了 谢谢

第三点 是起始跟结束纪录 aID就是前面获取的ROW_NUMBER() 其实这边用BETWEEN AND更好点
这个我还是有些模糊,可能概念不太明白把。我也知道是起始跟结束纪录,但为什么呢?

aID 好象是一个语句
from (select actionconsumec.actionid,actionconsumec.consumerTime,
actionconsumecc.shopname,actionconsumec.subusername,actionconsumec.totalmoney,actionconsumec.userid,actionconsumec.username,
row_number() over(order by actionconsumec.consumerTime desc) as aId from actionconsumec 两个 from 不太明白。能讲清楚吗。谢谢了。
毛线 2010-09-08
  • 打赏
  • 举报
回复
路过。。看一下高手怎么搞的
屮艸芔茻2014 2010-09-08
  • 打赏
  • 举报
回复
第二点就是自定义一个分页id
NDDavid 2010-09-08
  • 打赏
  • 举报
回复
count(*) 是指获取数据总行数
row_number() over 是用来生成自增列
第三点是指 删选条件 actions.aId> @begin 并且<=@end
zthsn 2010-09-08
  • 打赏
  • 举报
回复
乖乖 语句长的让我不想看
porschev 2010-09-08
  • 打赏
  • 举报
回复
自己找找教程看一下存储过程

over是进行分组排序。。那里也可以用子查询。。。用over效率好点

带@。。是参数。。

后面的那个条件。。是在两个值之间满足条件
闲游四疯 2010-09-08
  • 打赏
  • 举报
回复
第一点 两个SELECT 一个返回总纪录数 一个返回结果集
第二点 ROW_NUMBER() 是SQL05特性 行索引 1 2 3 4 5行这样子 括号是里面是排序字段
第三点 是起始跟结束纪录 aID就是前面获取的ROW_NUMBER() 其实这边用BETWEEN AND更好点
powerchuangwai 2010-09-08
  • 打赏
  • 举报
回复
路过,帮顶。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧