[SQL Server Tips] 快速建立暫存資料表 / 複製資料表結構到暫存資料表 / Create temp tables rapidly
在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 相同的結構了
--
筆者覺得這是一個十分好用的小技巧
推薦給您囉~