Sql Server臨時(shí)表的生存周期
Sql Server臨時(shí)表的生存周期可能很多人都不是非常了解,下文就為您介紹Sql Server臨時(shí)表的生存周期,供您參考,希望對(duì)您能有所幫助。
局部臨時(shí)表#temp_table:
只在當(dāng)前會(huì)話結(jié)有效。會(huì)話終止則生存終止。
根據(jù)session不同開辟不一樣的內(nèi)存存放數(shù)據(jù)。
相同session的用戶可以使用同一張臨時(shí)表,只能create table 一次。
不同session建的臨時(shí)表,即使表名相同,指向的內(nèi)存也是不一樣的,互相內(nèi)容不可見。
全局臨時(shí)表##temp_table:
顧名思義,不同的session可以使用同一塊內(nèi)存。但是其中的內(nèi)容到底什么時(shí)候才被回收呢?
自己做了一個(gè)測(cè)試,結(jié)果用小白文說起來就是:
只要有任何session用到過這個(gè)表,且這些session沒有被全部終止,就不被回收。
所謂session終止,我的理解,就sqlserver本身來說就是query窗體被關(guān)掉。如果是因?yàn)橛袘?yīng)用程序連接而產(chǎn)生的session的話(以上所說的session都是sqlserver的session),web系就是session重啟(IIS application pool重啟,這里所說的session是http的session),應(yīng)用系的話就是充啟應(yīng)用程序了(←猜想,沒試過)。
下面是網(wǎng)上找的,概括一下機(jī)能就是,創(chuàng)建一個(gè)不被自動(dòng)回收的全局臨時(shí)表。沒有經(jīng)過測(cè)試,雖然貌似看上去沒啥意義,和常規(guī)表有什么區(qū)別?說不定以后有用,所以還是記下來:
USE master;
GO
IF OBJECT_ID('dbo.sp_Globals') IS NOT NULL
DROP PROC dbo.sp_Globals
GO
CREATE proc dbo.sp_Globals
AS
CREATE TABLE ##Globals
(
id varchar(36) NOT NULL PRIMARY KEY
value varchar(500)
)
GO
↑sp內(nèi)容
EXEC dbo.sp_procoption 'dbo.sp_Globals','startup','true';
只有顯示刪除##Globals才會(huì)被清除
以上Sql Server臨時(shí)表的生存周期的介紹。
【編輯推薦】