很多查詢類的存儲過程會返回一個表結(jié)構(gòu)的結(jié)果集,如果在其他存儲過程中需要用到這個結(jié)果集,為了避免編寫重復(fù)的sql腳本,可以直接使用前者的查詢結(jié)果。
如,存儲過程sp_GetBorrowRecord @BeginTime,@EndTime 可以查詢出某一時間范圍(開始時間@BeginTime,結(jié)束時間@EndTime)內(nèi)的所有借書記錄。這個存儲過程可以用于對借書記錄的查詢頁面。
現(xiàn)在需要實現(xiàn)另一個功能:將某時間段內(nèi)的借書記錄進(jìn)行匯總分析。如按被借閱的書籍類型進(jìn)行分組,并按各類書籍的借書總數(shù)進(jìn)行排序。當(dāng)然可以直接使用group by等方法直接重新進(jìn)行查詢,但為了說明本例,暫且用另一種方法進(jìn)行實現(xiàn),并且該方法也有其特有的優(yōu)勢(在文章最后會提到)。如下所示,建一個新的存儲過程:
--獲取借書記錄分析情況
create proc sp_GetBorrowAnalysis
@BeginTime datetime,
@EndTime datetime
as
--建一個表變量,結(jié)構(gòu)與sp_GetBorrowRecord查詢出的結(jié)果集相同
declare @Record table
(
BookID int, --書籍ID
BookName varchar(100), --書籍名稱
TypeID int, --書籍類別ID
CardID int --借書卡ID
CardName varchar(100) --借書人姓名
)
--獲取這段時間內(nèi)的借書記錄,并存入@Record表變量中
insert into @Record
exec sp_GetBorrowRecord @BeginTime,@EndTime
--接下來,就可以像使用一個普通的表一樣,對查出的數(shù)據(jù)(@Record中的數(shù)據(jù))進(jìn)行所需要的各項處理
--。。。。。
go