Sql Server臨時表的生存周期可能很多人都不是非常了解,下文就為您介紹Sql Server臨時表的生存周期,供您參考,希望對您能有所幫助。
局部臨時表#temp_table:
只在當前會話結有效。會話終止則生存終止。
根據session不同開辟不一樣的內存存放數據。
相同session的用戶可以使用同一張臨時表,只能create table 一次。
不同session建的臨時表,即使表名相同,指向的內存也是不一樣的,互相內容不可見。
全局臨時表##temp_table:
顧名思義,不同的session可以使用同一塊內存。但是其中的內容到底什么時候才被回收呢?
自己做了一個測試,結果用小白文說起來就是:
只要有任何session用到過這個表,且這些session沒有被全部終止,就不被回收。
所謂session終止,我的理解,就sqlserver本身來說就是query窗體被關掉。如果是因為有應用程序連接而產生的session的話(以上所說的session都是sqlserver的session),web系就是session重啟(IIS application pool重啟,這里所說的session是http的session),應用系的話就是充啟應用程序了(←猜想,沒試過)。
下面是網上找的,tb概括一下機能就是,創建一個不被自動回收的全局臨時表。沒有經過測試,雖然貌似看上去沒啥意義,和常規表有什么區別?說不定以后有用,所以還是記下來:
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內容
EXEC dbo.sp_procoption 'dbo.sp_Globals','startup','true';
只有顯示刪除##Globals才會被清除
以上Sql Server臨時表的生存周期的介紹。