昨天講了 SQL 的 CTE ,今天換來講暫存表。
跟 CTE 不同,暫存表會存放於 SQL Server 中系統資料庫的 tempdb
。是會寫到實體檔案的,所以建立的過程會被 I/O 的效能影響。
一個井號的暫存表(#Table),不是指只有建立的 User 可以看見,而是只有建立的工作階段可以看見、可以使用
同一個登入帳戶,不同的頁籤就是不同的工作階段。
兩個井號的暫存表(##Table),在建立的工作階段尚未關閉時,整台資料庫的其他 User 、其他工作階段都可以看見、可以使用
在 Stackoverflow 上這則討論中提到。
Declare @strDynamicSQL as varchar(8000)
Set @strDynamicSQL = 'Select GetDate() As TheDate Into #TheDateTable'
Execute(@strDynamicSQL)
Select *
From #TheDateTable
上述語法中最後一行想要取得 #TheDateTable
是會發生錯誤,因為實際建立暫存表的是Execute()