參考:http://www.51testing.com/html/78/n-816578-4.html
總結
| 特性 |
表變數 |
暫存資料表 |
| 範圍 |
當前批處理 |
當前會話,嵌套預存程序,全域:所有會話 |
| 使用情境 |
自訂函數,預存程序,批處理 |
自訂函數,預存程序,批處理 |
| 建立方式 |
DECLARE statement only.只能通過DECLEARE語句建立 |
CREATE TABLE 語句 SELECT INTO 語句. |
| 表名長度 |
最多128位元組 |
最多116位元組 |
| 列類型 |
可以使用自訂資料類型 可以使用XML集合 |
自訂資料類型和XML集合必須在TempDb內定義 |
| Collation |
字串定序繼承自當前資料庫 |
字串定序繼承自TempDb資料庫 |
| 索引 |
索引必須在表定義時建立 |
索引可以在表建立後建立 |
| 約束 |
PRIMARY KEY, UNIQUE, NULL, CHECK約束可以使用,但必須在表建立時聲明 |
PRIMARY KEY, UNIQUE, NULL, CHECK. 約束可以使用,可以在任何時後添加,但不能有外鍵約束 |
| 表建立後使用DDL (索引,列) |
不允許 |
允許. |
| 資料插入方式 |
INSERT 語句 (SQL 2000: 不能使用INSERT/EXEC). |
INSERT 語句, 包括 INSERT/EXEC. SELECT INTO 語句. |
| Insert explicit values into identity columns (SET IDENTITY_INSERT). |
不支援SET IDENTITY_INSERT語句 |
支援SET IDENTITY_INSERT語句 |
| Truncate table |
不允許 |
允許 |
| 析構方式 |
批處理結束後自動析構 |
顯式調用 DROP TABLE 語句. 當前會話結束自動析構 (全域暫存資料表: 還包括當其它會話語句不在參考資料表.) |
| 事務 |
只會在更新表的時候有事務,期間比暫存資料表短 |
正常的事務長度,比表變數長 |
| 預存程序重編譯 |
否 |
會導致重編譯 |
| 復原 |
不會被復原影響 |
會被復原影響 |
| 統計資料 |
不建立統計資料,所以所有的估計行數都為1,所以產生執行計畫會不精準 |
建立統計資料,通過實際的行數產生執行計畫。 |
| 作為參數傳入預存程序 |
僅僅在SQL Server2008, 並且必須預定義 user-defined table type. |
不允許 |
| 顯式命名物件 (索引, 約束). |
不允許 |
允許,但是要注意多使用者的問題 |
| 動態SQL |
必須在動態SQL中定義表變數 |
可以在調用動態SQL之前定義暫存資料表 |