分享:在存儲進程中應用另外一個存儲進程前往的查詢成果集的辦法。本站提示廣大學習愛好者:(分享:在存儲進程中應用另外一個存儲進程前往的查詢成果集的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是分享:在存儲進程中應用另外一個存儲進程前往的查詢成果集的辦法正文
許多查詢類的存儲進程會前往一個表構造的成果集,假如在其他存儲進程中須要用到這個成果集,為了不編寫反復的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不支撐該辦法。