1、創建方法:
方法一:
create table TempTableName
或
select [字段1,字段2,...,] into TempTableName from table
方法二:
create table tempdb.MyTempTable(Tid int)
說明:
(1)、臨時表其實是放在數據庫tempdb裡的一個用戶表;
(2)、TempTableName必須帶“#”,“#"可以是一個或者兩個,以#(局部)或##(全局)開頭的表,這種表在會話期間存在,會話結束則自動刪除;
(3)、如果創建時不以#或##開頭,而用tempdb.TempTable來命名它,則該表可在數據庫重啟前一直存在。
2、手動刪除
drop table TempTableName
說明:
DROP TABLE 語句顯式除去臨時表,否則臨時表將在退出其作用域時由系統自動除去:
(1)、當存儲過程完成時,將自動除去在存儲過程中創建的本地臨時表。由創建表的存儲過程執行的所有嵌套存儲過程都可以引用此表。但調用創建此表的存儲過程的進程無法引用此表;
(2)、所有其它本地臨時表在當前會話結束時自動除去;
(3)、全局臨時表在創建此表的會話結束且其它任務停止對其引用時自動除去。任務與表之間的關聯只在單個Transact-SQL語句的生存周期內保持。換言之,當創建全局臨時表的會話結束時,最後一條引用此表的Transact-SQL語句完成後,將自動除去此表。
3、示例代碼
(1)創建
use testdb --創建局部臨時表 create table #tmpStudent(Tid int,Name varchar(50),Age int) insert into #tmpStudent values('xiaowang',25) select * from #tmpStudent --創建局部臨時表 另一種寫法 select * into #tmpStudent from student select * from #tmpStudent
第二種創建方法:
create table tempdb.MyTempTable(Tid int) --有對應權限才可以這麼寫
(2)刪除
drop table #tmpStudent
關於sql中臨時表的生命周期
1.局部臨時表(#開頭)只對當前連接有效,當前連接斷開時自動刪除。
2.全局臨時表(##開頭)對其它連接也有效,在當前連接和其他訪問過它的連接都斷開時自動刪除。
3.不管局部臨時表還是全局臨時表,只要連接有訪問權限,都可以用drop table #Tmp(或者drop table ##Tmp)來顯式刪除