暫存表分兩種:#temp(區域)與 ##temp(全域),生命週期與可見度截然不同。
#tempTableDROP。#tempTable,互不干擾。##tempTableDROP TABLE ##tempTable 釋放,否則佔用 tempdb 空間。CREATE TABLE #t (id INT); INSERT #t VALUES (1);SELECT * FROM #t → 成功。SELECT * FROM #t → 錯誤:找不到物件。##t 重複上述 → 視窗 2 可正常查詢。| 場景 | 建議 |
|---|---|
| 單一預存程序/批次內部暫存 | #temp(區域),自動清理、隔離性好 |
| 跨會話、跨預存程序共享資料 | ##temp(全域),但需自行管理清理 |
| 高併發、大量資料 | 考慮表變數 @t TABLE(...) 或記憶體優化表,減少 tempdb 壓力 |
#temp 跨會話可見 → 導致「找不到物件」錯誤。DROP 導致 tempdb 膨脹。#temp,外層無法存取(動態 SQL 為獨立會話範圍)。