[SQL Server Tips] 快速建立暫存資料表 / 複製資料表結構到暫存資料表 / Create temp tables rapidly

蔡仙草
·
·
IPFS
·

在SQL Server中 有時我們會需要 快速建立一個暫存資料表

其結構是複製自一般資料表

該怎麼做呢?

--

我們先假設一個情境... (若懶得看案例可以跳到文末,哈)

現在我們有一個 "銷售統計表 stats_sales"

而老闆希望每個小時都能更新其內容,好讓他可以常常去查看報表

最簡單的思維,就是排程跑Procedure,去做:

1. DELETE(或TRUNCATE TABLE) stats_sales

2. INSERT INTO stats_sales(假設三角形步驟最花時間,需要好幾分鐘)


不過這樣有個風險:Procedure執行完以前,老闆看到的資料會不完整

因此我們可能會想:那就加上Transaction,在Insert完以前先鎖住資料表囉

這是個方法,但如果跑Procedure需要一段時間,則會讓老闆以為報表程式壞掉...

--

那那... 該怎麼辦呢?


其實只要把Procedure流程改一下,變成:

1. CREATE TABLE #stats_sales ( ) 建立暫存資料表

2. INSERT INTO #stats_sales ▲  把資料先寫到暫存資料表

3. DELETE(或TRUNCATE TABLE) stats_sales  刪掉資料表中的資料

4. INSERT INTO stats_sales SELECT * FROM #stats_sales  把暫存資料表複製到資料表

即可


不過,由於上述步驟1

CREATE TABLE 時得填鍵入所有欄位,遇到欄位很多的話就很麻煩

有沒有比較方便的方法呢?

答案是有的,在SQL Server只要用此句SQL就能辦到:

SELECT TOP 0 *
INTO #stats_sales
FROM stats_sales

此時 #stats_sales 就有和 stats_sales 相同的結構了


--

筆者覺得這是一個十分好用的小技巧

推薦給您囉~

CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!