又是想到什麼寫什麼系列……上次http://www.cnblogs.com/Gin-23333/p/5096638.html 寫了一下,今天補充點其它的1、在事務裡面的影響,臨時表可以被回滾 而表變數是不能回滾的。簡單的例子DECLARE @T AS TABLE(ID INT,Name NVARCH...
又是想到什麼寫什麼系列……上次 http://www.cnblogs.com/Gin-23333/p/5096638.html 寫了一下,今天補充點其它的
1、在事務裡面的影響,臨時表可以被回滾 而表變數是不能回滾的。簡單的例子
DECLARE @T AS TABLE( ID INT, Name NVARCHAR(50) ) IF OBJECT_ID('tempdb..#T') IS NOT NULL DROP TABLE #T CREATE TABLE #T ( ID INT, Name NVARCHAR(50) ) BEGIN TRAN INSERT INTO @T ( ID, Name ) VALUES ( 1,N'Col1' ); INSERT INTO #T ( ID, Name ) VALUES ( 1,N'Col1' ); ROLLBACK SELECT * FROM @T SELECT * FROM #T @T ID Name ----------- -------------------------------------------------- 1 Col1 #T ID Name ----------- --------------------------------------------------
2、臨時表定義好之後可以通過DDL語句修改結構,但是表變數就不行了
DECLARE @T AS TABLE( ID INT PRIMARY KEY, Name NVARCHAR(50) ) IF OBJECT_ID('tempdb..#T') IS NOT NULL DROP TABLE #T CREATE TABLE #T ( ID INT PRIMARY KEY, Name NVARCHAR(50) ) ALTER TABLE #T ADD Col1 nvarchar(50); SELECT * FROM #T ALTER TABLE @T1 ADD Col1 nvarchar(50); SELECT * FROM @T
消息 102,級別 15,狀態 1,第 16 行
“@T1”附近有語法錯誤。
消息 102,級別 15,狀態 1,第 16 行
“Col1”附近有語法錯誤。
3、臨時表可以定義外鍵,但是表變數是不行的(這裡代碼就不寫了╮(╯_╰)╭,)
4、臨時表可以創建索引,表變數是不行的,所以中間緩存結果會比較大的時候,可以適當使用臨時表創建索引來進行優化。
5、表變數不維護統計數據。這意味著任何表變數數據更改都不會引起相關查詢語句進行重編譯
6、表變數可以引用用戶自定義數據類型,臨時表並不能,因為臨時表引用的是tempdb,而裡面並沒有定義該用戶自定義類型。
暫時想到這麼多╮(╯_╰)╭,如果想到新的東西再分享