SQL Server 暫存表( #Table、##Table)、暫存變數表( @Table )

暫存表 Temp Table

  • 暫存表是在執行時在系統資料庫的tempdb中實體建立出來的資料表。
  • 暫存表與一般的資料表類似,可以設定constraints, keys, indexes。
  • 有以下類型的暫存表
    • 本地暫存表 Local Temp Table
    • 全局暫存表 Global Temp Table

本地暫存表 #Table

  • 本地暫存表僅在當前建立出#Table的Session可以使用,Session結束時會自動刪除。
  • 可以使用現有資料表的資料塞入Temp Table,或是預先宣告Temp Table的結構。
SQL
--範例一
Select * Into #tempTable
From [資料表名稱] 

--刪除
drop table #tempTable;

用完請記得刪除,否則在同一個Session中再執行一次的話,會出現錯誤訊息

SQL
--範例二
CREATE TABLE #tempTable
(
    [Column1] Int,
    [Column2] Nvarchar(50),
)
INSERT INTO #tempTable (Column1,Column2) VALUES (1,'temp');

SELECT * FROM #tempTable;
--刪除
drop table #tempTable;

何時使用本地暫存表?

  • 需要暫存的資料很多(超過 100 筆)。
  • 應用情境只能單獨使用。
  • 如果需要使用Index時。
  • 不能在User Defined Functions 中使用暫存表。

全局暫存表 ##Table

  • 與本地暫存表差不多
  • 差別是建立的##Table,所有Session皆可以使用,所有的Session結束時才會自動刪除

暫存變數表 @Table

  • 暫存變數表類似暫存表,用於暫存資料。
  • 暫存變數表的使用範圍僅限於批次指令執行和Stored Procedure。一旦批次指令執行結束(例如Stored Procedure),便會自動從記憶體中被刪除。
  • 暫存變數表名稱以“@”開頭。
  • 暫存變數表需要使用DECLARE預先宣告結構。
  • 對暫存變數表使用“INSERT”語句來儲存資料,不能對使用“Select * into @Table”
  • 暫存變數表可以作為參數傳遞給Function和Stored Procedure。
SQL
DECLARE @tempTable AS TABLE
(
    [Column1] Int,
    [Column2] Nvarchar(50)
);

INSERT INTO @tempTable (Column1,Column2) VALUES (1,'temp');

SELECT * FROM @tempTable;

何時使用暫存變數表?

  • 將暫存資料儲存在User Defined Functions、Stored Procedure和query batches。
  • 需要暫存的資料較少(少於 100 筆)。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


內容索引