0

據我所知,表表達式不會持續,這意味着在外部代碼中對它的每個引用都是對定義的重複調用。這是表格變量/臨時表格在圖片中的位置,堅持表格並避免每次重新評估。在我看來,表變量/臨時表是避免重複的更好選擇。餘由anology編程,其中,代替調用方法表表達式和表變量/臨時表持久性

myMethod() 
每次

,我寧願一個變量分配給它

int res = myMethod() 

避免調用myMethod的()多次。 myMethod()類似於表格表達,res是表格變量/臨時表格。

那麼我們爲什麼要使用表表達式?我們必須在哪些場景中使用表格表達而不是其他兩種?反之亦然?

謝謝。

+0

CTE的增加遞歸功能,並且也使代碼更不是派生表讀了很多人的。 –

+0

一個有趣的意見http://sqlserverplanet.com/design/ctes-vs-temp-tables-an-opinion –

回答

1

從我的經驗來說

  • 想象一下,你用刀片10萬條記錄到臨時表,並用它只有一次。這將純粹浪費時間,內存和CPU。要更高效地使用大型臨時表,還需要在臨時表之上創建索引。而CTE使用現有表中的索引。
  • 當你想從標量表達式組列。例如。將row_number()列分組。
  • 更可讀的複雜查詢當然
  • 它允許我們編寫遞歸查詢這是非常酷