[MS SQL]使用#Temp Table在if…else if 條件分支使用小筆記
前言
因為工作的關係,這幾個月來開始大量接觸複雜T-SQL,所以遇到有些問題都會筆記下來,順便做個分享(真懷念程式與DB權責分離的時候 T___T)
Temporary Tables
在SQL Server裡,創建方式又分為Create及Declare,前者儲存於DB的TempDB中,後者儲存於記憶體裡,當Session關閉連線時,暫存Table將會Drop掉。
暫存表的使用方式可以參考以下文章:
建立#TempTable與Declare @TempTable有何差別
條件分支遇到的問題
今天撰寫Temp Table遇到了if…else if遇到了執行錯誤的問題,我試著用簡單的邏輯來記錄下來。
這是一個很簡單的if…else if判斷,但在不同的分支下加入暫存表的寫法就會發生2714的錯誤
在into之前drop掉也無法:
後來找到微軟有官方的解答(機器翻譯),照他給的Sample Code進行些修改,將定義Table的抽出外層,不同的是,他的Temp欄位只有一個,而我的欄位有非常多所以不可能一個一個宣告,所以我先Select top 0 將欄位INTO到Temp Table,接著再依不同條件Inserty資料,改寫完的Code如下:
IF object_id(N'tempdb.dbo.#TempTable') IS NOT NULL drop table TempTable
select TOP 0 * INTO #TempTable from DemoTable
if (1=1)
begin
INSERT INTO #TempTable
select * from DemoTable where ColumnName = 'Filter1'
end
else if (1=2)
begin
INSERT INTO #TempTable
select * from DemoTable where ColumnName = 'Filter2'
end
SELECT * FROM #TempTable
--Do something ....
--
Reference
http://stackoverflow.com/questions/4155996/sql-insert-into-temp-table-in-both-if-and-else-blocks