前言
因為工作的關係,這幾個月來開始大量接觸複雜T-SQL,所以遇到有些問題都會筆記下來,順便做個分享(真懷念程式與DB權責分離的時候 T___T)
Temporary Tables
在SQL Server裡,創建方式又分為Create及Declare,前者儲存於DB的TempDB中,後者儲存於記憶體裡,當Session關閉連線時,暫存Table將會Drop掉。
暫存表的使用方式可以參考以下文章:
MS SQL 建立暫存表格 temp table
建立#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如下:
-- 如果Temp Table存在,則清除 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
http://social.msdn.microsoft.com/forums/sqlserver/en-US/42a377a6-8d2f-4666-bf86-f0d005cde51c/tsql-same-temp-table-in-if-else-block-error
http://deanma.blogspot.tw/2012/01/ms-sql-temp-table.html
沒有留言:
張貼留言