表變數和臨時表的差別 (以前把表變數叫成變數表了,哎。。。)

SieSteven發表於2016-01-04

首先,本文摘抄了別人的文章以及書籍。

悲催了。在ef4中使用臨時表無法獲得返回型別的變數。因此,全部弄回了表變數。寫了一坨重複程式碼。靠!這個問題一定要解決掉!!!!!!!!


1、臨時表
臨時表包括:以#開頭的區域性臨時表,以##開頭的全域性臨時表。
a、儲存
不管是區域性臨時表,還是全域性臨時表,都會放存放在tempdb資料庫中。
b、作用域
區域性臨時表:對當前連線有效,只在建立它的儲存過度、批處理、動態語句中有效,類似於C語言中區域性變數的作用域。
全域性臨時表:在所有連線對它都結束引用時,會被刪除,對建立者來說,斷開連線就是結束引用;對非建立者,不再引用就是結束引用。
但最好在用完後,就通過drop table 語句刪除,及時釋放資源。
c、特性
與普通的表一樣,能定義約束,能建立索引,最關鍵的是有資料分佈的統計資訊,這樣有利於優化器做出正確的執行計劃,但同時它的開銷和普通的表一樣,一般適合資料量較大的情況。
有一個非常方便的select ... into 的用法,這也是一個特點。


2、表變數
a、儲存
表變數存放在tempdb資料庫中。
b、作用域
和普通的變數一樣,在定義表變數的儲存過程、批處理、動態語句、函式結束時,會自動清除。
c、特性
可以有主鍵,但不能直接建立索引,也沒有任何資料的統計資訊。表變數適合資料量相對較小的情況。
必須要注意的是,表變數不受事務的約束,


摘抄2

指令碼之家的博文

指令碼之家的這篇文章描述的比較詳細

摘抄3

部落格園博文

部落格園這篇也挺好。留給自己作為參考。最快也得等到晚上了。。。


自己寫的一個儲存過程,朋友指出的問題

1、

 你前面沒有建立臨時表的語句 :說明在前面要宣告臨時表
2、沒建立的話用不著清表,要麼清,要麼刪,不用清完後在刪
3、SELECT * into 少用些



相關文章