SQL Server 臨時表/暫存表 (Temporary table)

有些時候在處理 SQL 資料時需要暫時儲存查詢結果,就可以將資料儲存在臨時表中。另外 SQL Server 的變數也不能儲存多個值,這時候也可以透過暫存表來達成。

建立臨時表

臨時表的建立方式和一般表的建立方式一樣,差別在於資料表名稱是使用井號(#)開頭,並且會建立在 tempdb 中。

臨時表有兩種:
  • 區域臨時表:使用一個井號(#)開頭,只在當前連線(session)和當前使用者中有效,關閉連線後會自動刪除,例: #MyTabel
  • 全域臨時表:使用兩個井號(##)開頭,對所有連線(session)和所有使用者有效,所有連線關閉後會自動刪除,例: ##MyTable
臨時表是依據資料表名稱來決定是哪一種臨時表,因為資料表名稱不同, #MyTabel 和 ##MyTabel 可以同時存在,兩者互相獨立,是沒有關聯的兩張表。

下面是建立 區域臨時表 示範:
    
CREATE TABLE #MyTable
(
    ID   INT,
    Name NVARCHAR(50)
);
    

臨時表和一般資料表的使用方式一樣,都可以新增、修改、刪除、查詢、建立索引、約束等。上面範例中臨時表的資料表名稱就是 #MyTable (有包含 #)

雖然會自動刪除,不過使用完畢最好手動刪除臨時表,避免長時間連線未關閉而持續佔用 tempdb 資源:
    
DROP TABLE #MyTable;
    



參考資料:
Microsoft.Learn - CREATE TABLE (Transact-SQL) #Temporary tables
Microsoft.Learn - tempdb database

留言

張貼留言

如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com