臨時表分為局部和全局 分別是#開頭和##開頭
#開頭的臨時表只能在本回話中使用,當回話結束的時候創建的臨時表會被刪除
##開頭的臨時表可以在所有回話中使用,當sqlserver被重啟的時候會被刪除
無論是#開頭的還是##開頭的臨時表都存在tempdb數據庫中
我們可以通過以下語句測試
create table ##aa( a nvarchar(10))
打開tempdb我們可以看到我們剛創建的表當我們把回話關閉的時候,刷新tempdb表,我們依然可以看到##aa,當我們把sqlserver服務重啟的時候我們看到這個表並不存在了,tempdb又回到了最初的狀態。
接下來我們去掉一個#試試
create table #aa( a nvarchar(10))
我們打開兩個回話分別輸入上面的代碼執行,執行之后我們同樣打開tempdb表,
我們可以看到我們剛才創建的#aa表,同時sqlserver根據我們不同的回話在#aa后面增加了不同的后綴,現在我們關閉回話,再次刷新tempdb表,可以看到兩個臨時表都被刪除了。
臨時表的創建
臨時表在實際使用的時候我們可以通過 create table來創建,例如以上的代碼;我們也可以通過 select into語句來創建臨時表,例如
select a into #aa from table1
我們知道全局臨時表在所有回話都可以用的,所以在創建的時候最好先判斷這個臨時表是否存在,然后再進行創建
臨時表的刪除
刪除臨時表我們可以通過
drop table ##aa drop table #aa
的方式來刪除
臨時表使用
臨時表在實際開發的過程當中當我們在存儲過程當中需要存放一些臨時的計算結果,而又沒有實際的表提供給你可用的時候,臨時表給開發人員提供了很大的便利;
臨時表的使用可以降低語句的復雜度,當很多表關聯的時候,我們可以降篩選度大的數據存放在臨時表中,在通過臨時表去和別的表關聯,這樣可以提高性能,但是要注意的是當數據量很大的時候,存放在臨時表中就不是一個明智的選擇,我們要根據實際的情況合理的使用臨時表。