SQL Server 支持三種類型的臨時表:局部臨時表、全局臨時表及表變量。全部三種類型的臨時表都是在tempdb數據庫中建立的。數據庫
1. 局部臨時表函數
要建立局部臨時表,只須要在命名時以單個數字符號(#)做爲前綴,例如#T1。內存
局部臨時表只對建立它的會話在建立級和調用堆棧內部級(內部的過程、函數、觸發器、以及動態批處理)是可見的。當建立級例程彈出調用堆棧,SQL Server 就會自動刪除相應的臨時表。變量
2. 全局臨時表權限
若是建立的是全局臨時表,則它對其餘全部會話均可見。當建立臨時表的會話斷開數據庫的聯接,並且也沒有活動在引用全局臨時表,SQL Server 會自動刪除相應的全局臨時表。要建立全局臨時表,只須要在命名時用兩個數字符號(##)做爲前綴,如##T1。引用
當須要和全部人共享臨時數據時,就能夠用全局臨時表。訪問全局臨時表不須要任何特殊的權限,全部人均可以獲取完整的DDL和DML訪問。固然,每一個人均可以徹底訪問也意味着任何人均可以刪除這個表,因此也應該謹慎考慮全局臨時表的反作用。命名
注意:只要建立全局臨時表的會話斷開了數據庫的聯接,並且也沒有其餘活動引用全局臨時表,SQL Server 就會自動刪除它。數據
3. 表變量和局部臨時表在某些方面有相同之處,也有不一樣之處。聲明表變量的方式和聲明其餘變量相似,使用的都是DECLARE語句。db
和使用局部臨時表同樣,表變量在tempdb數據庫中也有對應的表做爲其物理表示,而不是像一般所理解的那樣,覺得表變量只在內存中存在。和局部臨時表相似,表變量也只對建立它的會話可見,但容許訪問的範圍更有限,它只對當前批處理可見。表變量對調用堆棧中當前批處理的內部批處理是不可見的,對會話中隨後的批處理也是不可見的。字符