视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
分享:在存储过程中使用另一个存储过程返回的查询结果集的方法
2020-11-09 07:07:04 责编:小采
文档


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

下载本文
显示全文
专题