分享:在存储过程中使用另一个存储过程返回的查询结果集的方法

时间:2024-01-16 13:03:57 

很多查询类的存储过程会返回一个表结构的结果集,如果在其他存储过程中需要用到这个结果集,为了避免编写重复的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不支持该方法。

标签:存储过程返回结果集
0
投稿

猜你喜欢

  • pytorch教程resnet.py的实现文件源码分析

    2023-11-07 21:18:47
  • python使用SQLAlchemy操作MySQL

    2024-01-16 19:11:11
  • 关于document.cookie的使用

    2008-03-25 12:07:00
  • 大数据量分页存储过程效率测试附测试代码与结果

    2024-01-15 00:49:21
  • 基于python3监控服务器状态进行邮件报警

    2022-05-05 05:25:39
  • win7系统安装SQLServer2000的详细步骤(图文)

    2024-01-27 02:39:26
  • 详解Python 多线程 Timer定时器/延迟执行、Event事件

    2022-09-04 11:12:52
  • python实现聊天小程序

    2023-11-07 05:17:51
  • OpenCV+python实现膨胀和腐蚀的示例

    2021-06-12 10:35:00
  • PHP连接和操作MySQL数据库基础教程

    2023-11-20 22:41:47
  • asp如何限制重复订阅邮件或重复投票?

    2010-06-09 18:48:00
  • Bootstrap Table 删除和批量删除

    2024-05-25 15:17:21
  • Python进程间通信Queue实例解析

    2023-11-06 13:50:08
  • Python中输出ASCII大文字、艺术字、字符字小技巧

    2021-03-03 00:06:49
  • python实现二叉树的遍历

    2023-06-29 17:45:42
  • Python3使用turtle绘制超立方体图形示例

    2021-02-01 14:21:07
  • 简单了解python列表和元组的区别

    2022-02-11 17:14:43
  • Vue+Mock.js模拟登录和表格的增删改查功能

    2024-05-29 22:20:04
  • 从console.log说起(console.log详细介绍)

    2022-03-23 03:16:34
  • vue props 一次传多个值实例

    2024-05-03 15:10:32
  • asp之家 网络编程 m.aspxhome.com