分享:在存儲(chǔ)過(guò)程中使用另一個(gè)存儲(chǔ)過(guò)程返回的查詢(xún)結(jié)果集的方法
很多查詢(xún)類(lèi)的存儲(chǔ)過(guò)程會(huì)返回一個(gè)表結(jié)構(gòu)的結(jié)果集,如果在其他存儲(chǔ)過(guò)程中需要用到這個(gè)結(jié)果集,為了避免編寫(xiě)重復(fù)的sql腳本,可以直接使用前者的查詢(xún)結(jié)果。
如,存儲(chǔ)過(guò)程sp_GetBorrowRecord @BeginTime,@EndTime 可以查詢(xún)出某一時(shí)間范圍(開(kāi)始時(shí)間@BeginTime,結(jié)束時(shí)間@EndTime)內(nèi)的所有借書(shū)記錄。這個(gè)存儲(chǔ)過(guò)程可以用于對(duì)借書(shū)記錄的查詢(xún)頁(yè)面。
現(xiàn)在需要實(shí)現(xiàn)另一個(gè)功能:將某時(shí)間段內(nèi)的借書(shū)記錄進(jìn)行匯總分析。如按被借閱的書(shū)籍類(lèi)型進(jìn)行分組,并按各類(lèi)書(shū)籍的借書(shū)總數(shù)進(jìn)行排序。當(dāng)然可以直接使用group by等方法直接重新進(jìn)行查詢(xún),但為了說(shuō)明本例,暫且用另一種方法進(jìn)行實(shí)現(xiàn),并且該方法也有其特有的優(yōu)勢(shì)(在文章最后會(huì)提到)。如下所示,建一個(gè)新的存儲(chǔ)過(guò)程:
--獲取借書(shū)記錄分析情況
create proc sp_GetBorrowAnalysis
@BeginTime datetime,
@EndTime datetime
as
--建一個(gè)表變量,結(jié)構(gòu)與sp_GetBorrowRecord查詢(xún)出的結(jié)果集相同
declare @Record table
(
BookID int, --書(shū)籍ID
BookName varchar(100), --書(shū)籍名稱(chēng)
TypeID int, --書(shū)籍類(lèi)別ID
CardID int --借書(shū)卡ID
CardName varchar(100) --借書(shū)人姓名
)
--獲取這段時(shí)間內(nèi)的借書(shū)記錄,并存入@Record表變量中
insert into @Record
exec sp_GetBorrowRecord @BeginTime,@EndTime
--接下來(lái),就可以像使用一個(gè)普通的表一樣,對(duì)查出的數(shù)據(jù)(@Record中的數(shù)據(jù))進(jìn)行所需要的各項(xiàng)處理
--。。。。。
go
使用這種方法的好處是可以避免編寫(xiě)重復(fù)的代碼,并且利于維護(hù)。如果借書(shū)記錄的查詢(xún)條件發(fā)生變化,比如除了根據(jù)時(shí)間范圍進(jìn)行篩選,還需要根據(jù)借書(shū)卡是否有效,或所借書(shū)籍是否仍然存在等條件進(jìn)行篩選,那么只需要維護(hù)sp_GetBorrowRecord存儲(chǔ)過(guò)程即可,不需要將所有涉及到查詢(xún)借書(shū)記錄的存儲(chǔ)過(guò)程全部修改一遍。但這種方法在查詢(xún)的數(shù)據(jù)量較大的情況下比較影響性能,查詢(xún)速度較慢,在數(shù)據(jù)量較小的情況下這種差異并不明顯。
注:需要在sql server2005或更高版本中使用,低版本的sql server不支持該方法。
相關(guān)文章
SQL?Server備份數(shù)據(jù)庫(kù)的完整步驟
備份是指對(duì)SQL?Server數(shù)據(jù)庫(kù)或事務(wù)日志進(jìn)行的復(fù)制,下面這篇文章主要給大家介紹了關(guān)于SQL?Server備份數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
sql2000報(bào)錯(cuò)Successfully re-opened the local eventlog解決方法
這篇文章主要介紹了sql2000報(bào)錯(cuò)Successfully re-opened the local eventlog解決方法,需要的朋友可以參考下2014-12-12
SQL?Server主鍵與外鍵設(shè)置以及相關(guān)理解
在數(shù)據(jù)庫(kù)的學(xué)習(xí)中對(duì)于一個(gè)表的主鍵和外鍵的認(rèn)識(shí)是非常重要的,下面這篇文章主要給大家介紹了關(guān)于SQL?Server主鍵與外鍵設(shè)置以及相關(guān)理解的相關(guān)資料,需要的朋友可以參考下2022-10-10
SqlServer數(shù)據(jù)庫(kù)備份與還原的實(shí)現(xiàn)步驟
這篇文章主要介紹了SqlServer數(shù)據(jù)庫(kù)備份與還原的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
一個(gè)有趣的SQL命題 用一條語(yǔ)句切換BIT型的真假值
有個(gè)需求,用一條SQL語(yǔ)句(SQL SERVER)的,切換某個(gè)BIT字段值。也就是說(shuō)從TRUE變FALSE,從FALSE到TRUE。2009-08-08
實(shí)現(xiàn)SQL分頁(yè)的存儲(chǔ)過(guò)程代碼
本文主要介紹了分頁(yè)的存儲(chǔ)過(guò)程所實(shí)現(xiàn)代碼,使用存儲(chǔ)過(guò)程可以提高效率與節(jié)約時(shí)間,需要的朋友可以參考下2015-08-08
在SQL Server 2005中創(chuàng)建CLR存儲(chǔ)過(guò)程的詳細(xì)介紹
本篇文章是對(duì)在SQL Server 2005中創(chuàng)建CLR存儲(chǔ)過(guò)程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
sql server的 update from 語(yǔ)句的深究
這篇文章主要介紹了sql server的 update from 語(yǔ)句的深究,需要的朋友可以參考下2014-12-12
SQLServer數(shù)據(jù)庫(kù)的各種管理方法
這篇文章主要介紹了SQLServer數(shù)據(jù)庫(kù)的各種管理方法,需要的朋友可以參考下2015-10-10
Sql Server數(shù)據(jù)遷移的實(shí)現(xiàn)場(chǎng)景及示例
在 SQL Server 中,數(shù)據(jù)遷移是常見(jiàn)的場(chǎng)景之一,本文主要介紹了Sql Server數(shù)據(jù)遷移的實(shí)現(xiàn)場(chǎng)景及示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04

