很多查询类的存储过程会返回一个表结构的结果集,如果在其他存储过程中需要用到这个结果集,为了避免编写重复的sql脚本,可以直接使用前者的查询结果。
如,存储过程sp_GetBorrowRecord @BeginTime,@EndTime 可以查询出某一时间范围(开始时间@BeginTime,结束时间@EndTime)内的所有借书记录。这个存储过程可以用于对借书记录的查询页面。
现在需要实现另一个功能:将某时间段内的借书记录进行汇总分析。如按被借阅的书籍类型进行分组,并按各类书籍的借书总数进行排序。当然可以直接使用group by等方法直接重新进行查询,但为了说明本例,暂且用另一种方法进行实现,并且该方法也有其特有的优势(在文章最后会提到)。如下所示,建一个新的存储过程:
复制代码 代码如下:
--获取借书记录分析情况
create proc sp_GetBorrowAnalysis
@BeginTime datetime,
@EndTime datetime
as
--建一个表变量,结构与sp_GetBorrowRecord查询出的结果集相同
declare @Record table
(
BookID int, --书籍ID
BookName varchar(100), --书籍名称
TypeID int, --书籍类别ID
CardID int --借书卡ID
CardName varchar(100) --借书人姓名
)
--获取这段时间内的借书记录,并存入@Record表变量中
insert into @Record
exec sp_GetBorrowRecord @BeginTime,@EndTime
--接下来,就可以像使用一个普通的表一样,对查出的数据(@Record中的数据)进行所需要的各项处理
--。。。。。
go
使用这种方法的好处是可以避免编写重复的代码,并且利于维护。如果借书记录的查询条件发生变化,比如除了根据时间范围进行筛选,还需要根据借书卡是否有效,或所借书籍是否仍然存在等条件进行筛选,那么只需要维护sp_GetBorrowRecord存储过程即可,不需要将所有涉及到查询借书记录的存储过程全部修改一遍。但这种方法在查询的数据量较大的情况下比较影响性能,查询速度较慢,在数据量较小的情况下这种差异并不明显。
注:需要在sql server2005或更高版本中使用,低版本的sql server不支持该方法。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 瑞鸣音乐《中国音乐地图之听见河南豫剧经典唱段》2020[WAV分轨]
- 【伊比萨沙发】VA-2024-IbizaSpring2024(LoungeCocktailsfromtheHeart)[FLAC]
- 群星《世界顶级汽车音响试音王》4K金碟16CD[WAV+CUE]
- 群星-音效环绕天碟《极致环绕人声天碟天品》7CD[WAV]
- 泰拉克SACD古典试音碟7SACD-ISO
- 群星《红歌宝典》20CD[WAV/分轨]
- 《101系列:好歌101首 细听年代精选》[WAV+CUE][3.6GB]
- 《101系列 6CD 国语经典101首歌曲 张学友 王菲代表作》[APE+CUE][2.8GB]
- 《101系列:国语经典101 VOL2 6CD 精选最经典101首》[WAV+CUE][2.3GB]
- 群星《十年网络红歌》15CD[WAV分轨]
- 宝丽金-环球10周年至50周年经典金曲15CD[低速原抓WAV+CUE]
- FIM唱片《十大男伶》[低速原抓WAV+CUE]
- 《101系列:情歌101 6CD》[WAV+CUE][3.1GB]
- 庄心妍《降调版合集》[320K/MP3][52.96MB]
- 庄心妍《降调版合集》[FLAC/分轨][118.78MB]