T-SQL筆記7_單(雙)井字號_暫存Table與@資料表變數的使用
若到某些公司工作使用到MS SQL資料庫 在預存程序中時常看到有井字號Table名稱的出現 這類通常就是所謂的「暫存資料表」 最後往往都會搭配一個drop 井字號Table 暫存資料表就是暫存資料的儲存處,於系統執行過程中, 經常需要執行一些複雜的運算與處理,在run-time過程不免會產生 一些階段性與過渡性for後續處理的資料(資料在整個處理作業完成後便不再需要而必須刪除) 像此類資料就適合存放於暫存資料表,可以想像成寫在程式中就會是對應為DataTable,用於資料變數傳遞用途、後製處理等等。 暫存資料表由開發人員自行創建,不管您於任何資料庫中建立暫存資料表, 暫存資料表皆固定存放於系統資料庫的 tempdb中,而且 一旦不使用會自動被刪除。 於 MS SQL中又分為 第一種.區域性暫存資料表(臨時表) 以一個井字號(#)開頭 => #[TableName] 區域性暫存資料表只有建立它之連線的使用者能夠存取它,而且一旦此位使用者切斷與 SQL Server 的連線,區域性暫存資料表會在該session 關閉時自動被刪除, 當然,此位使用者也可以在連線期間 以 DROP TABLE 陳述式來刪除他所建立的區域性暫存資料表。 暫存表存在於"tempdb"這個database 裡 好的寫作習慣, 應在暫存表使用完畢後, 下指令去 drop, 而不是讓系統自動回收。 因為區域性臨時表通常都匯存比較久怕又記錄到上一次填入的值 備註:在使用前跟使用後通常都要分別加上 先判斷是否有已存於tempdb的 區域性臨時表 如上一次沒有成功釋放掉就要drop 1 2 3 4 IF Object_id( 'tempdb..#tmp_table' ) IS NOT NULL BEGIN DROP TABLE # tmp_table END 用於確保Temp Table有釋放掉,避免錯誤發生。 用法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 --Step1.先檢查是否沒有drop成功還有留存,或已經有取過相同名稱的 IF Object_id( 'tempdb..#temp_table_name&