2012-02-15 57 views
5

我已經使用了幾年的基本SQL。但是,直到最近我才遇到「WITH」命令。從我的研究中,它看起來像「WITH」是一種創建臨時表的方法。但以我的經驗,你也可以使用散列「#」來創建一個臨時表。T-SQL臨時數據比較#vs

我試圖搜索「WITH」和「#」,但由於這些都是奇怪的搜索詞,我沒有得到太多的結果。

難道有人會問我每個人的利弊有什麼區別嗎?

回答

4

您使用WITH來創建公用表表達式(CTE)。這在技術上不是臨時表。

臨時表與其他表相似,但存儲在tempdb中,並在關閉連接時斷開。

雖然與臨時表不同,但CTE實際上並沒有物理存儲。這更像是一個「觀點」。

Here is a great article on exactly what CTEs are。不像臨時表,即持續的連接,CTE是:

一個SELECT,INSERT,UPDATE,DELETE或CREATE VIEW語句

MSDN Reference on Using Common Table Expressions

的執行範圍內定義
0

WITH是一個即時創建的表(在內存中),所以它可能比臨時表(#)快得多,就像任何其他表一樣,但當您關閉連接時它會自動刪除。可以肯定的是,它只對一個聲明有效