分享:在存儲過程中使用另一個存儲過程返回的查詢結(jié)果集的方法
很多查詢類的存儲過程會返回一個表結(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
使用這種方法的好處是可以避免編寫重復(fù)的代碼,并且利于維護(hù)。如果借書記錄的查詢條件發(fā)生變化,比如除了根據(jù)時間范圍進(jìn)行篩選,還需要根據(jù)借書卡是否有效,或所借書籍是否仍然存在等條件進(jìn)行篩選,那么只需要維護(hù)sp_GetBorrowRecord存儲過程即可,不需要將所有涉及到查詢借書記錄的存儲過程全部修改一遍。但這種方法在查詢的數(shù)據(jù)量較大的情況下比較影響性能,查詢速度較慢,在數(shù)據(jù)量較小的情況下這種差異并不明顯。
注:需要在sql server2005或更高版本中使用,低版本的sql server不支持該方法。
相關(guān)文章
SQL Server簡單模式下誤刪除堆表記錄恢復(fù)方法(繞過頁眉校驗)
這篇主旨是揭示堆表的刪除記錄找回的原理,我所考慮的方面并不適用于每個人的每種情況,望大家見諒2013-01-01使用sqlserver官方驅(qū)動包調(diào)用存儲過程遇到的坑及解決方法
這篇文章主要介紹了用sqlserver官方驅(qū)動包調(diào)用存儲過程遇到的一個坑,解決方法大概就是換驅(qū)動包,在在存儲過程首行添加 set nocount on ,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10通過T_sql語句向其中一次填入一條數(shù)據(jù)或一次填入多條數(shù)據(jù)的方式填充數(shù)據(jù)
使用T_sql語句向其中一次填入一條數(shù)據(jù)或一次填入多條數(shù)據(jù)的方式填入數(shù)據(jù),需要的朋友可以參考下2012-10-10SQL Server 實現(xiàn)數(shù)字輔助表實例代碼
這篇文章主要介紹了SQL Server 實現(xiàn)數(shù)字輔助表的相關(guān)資料,并附實例代碼,需要的朋友可以參考下2016-10-10安裝sql server2008后再安裝sql 2005找不到本地服務(wù)器的解決方法
這篇文章主要介紹了安裝sql server2008后再安裝sql 2005找不到本地服務(wù)器的解決方法,需要的朋友可以參考下2015-01-01SQL Server誤區(qū)30日談 第6天 有關(guān)NULL位圖的三個誤區(qū)
NULL位圖是為了確定行中的哪一列是NULL值,哪一列不是。這樣做的目的是當(dāng)Select語句后包含存在NULL值的列時,避免了存儲引擎去讀所有的行來查看是否是NULL,從而提升了性能2013-01-01MSSQL SERVER 2005 數(shù)學(xué)函數(shù)整理
MSSQL SERVER 2005 數(shù)學(xué)函數(shù)整理2010-06-06sql server獲得新記錄標(biāo)識列值的二種方法
有時開發(fā)需要我們需把新插入的記錄之后立即返回插入記錄的ID哦,下面給大家介紹mssqlserver返回新添加的記錄的標(biāo)識列的值sql語句2013-11-11