| 特性 | 暫存表 (#temp) | 資料表變數 (@table) |
|---|---|---|
| 儲存位置 | tempdb (資料+記錄) | tempdb (資料+記錄),**不寫入交易記錄** | 索引/統計資料 | 支援建立索引、自動建立統計資料 | **不支援索引/統計資料** (僅主鍵/唯一約束隱含索引) |
| 平行執行計畫 | 支援 | **不支援** (序列執行) |
| 重新編譯 | 可能觸發 (統計資料變更) | **不觸發** (無統計資料),減少重編譯 |
| 動態 SQL 可見性 | 跨作用域可見 (建立於呼叫層級) | **僅在宣告批次內可見**,sp_executesql 內需同批次宣告 |
| 函數中使用 | **禁止** (副作用限制) | 允許 |
| 交易回滾影響 | 受交易控制,回滾會還原資料 | **不受交易控制**,回滾不還原變數內容 |
PRIMARY KEY、UNIQUE 約束,系統自動建立對應索引,可用於排序/查找。Table-Valued Parameters:解決動態 SQL/預存程序傳遞表值問題,支援統計資料 (SQL 2012+)。預設優先考慮 暫存表 以獲得完整優化器支援;僅在「小資料量、無索引需求、函數內部、避免重編譯」等特定場景選擇資料表變數。實測為準,勿迷信單一觀點。