我需要記錄的任一組A或集合B插入到#temptable,根據一定的條件IF ... ELSE ...兩個相互排斥的插入到#temptable
我的僞代碼:
IF OBJECT_ID('tempdb..#t1') IS NOT NULL DROP TABLE #t1;
IF {some-condition}
SELECT {columns}
INTO #t1
FROM {some-big-table}
WHERE {some-filter}
ELSE
SELECT {columns}
INTO #t1
FROM {some-other-big-table}
WHERE {some-other-filter}
上述兩個選擇是獨佔的(由ELSE運算符保證)。但是,SQL編譯器試圖智取我並拋出以下消息:
There is already an object named '#t1' in the database.
我的想法「固定」是創建#T1的前期,然後執行一個簡單的INSERT INTO(而不是SELECT ... INTO) 。但我喜歡極簡主義,我想知道這是否可以以更簡單的方式實現,即沒有明確的CREATE TABLE#t1。
順便說一句,爲什麼它不給我在第一行條件DROP TABLE錯誤?就是想。
要回答你最後一個問題;只有'IF'語句返回true時,纔會執行DROP TABLE#t1,即表存在。正如你所說的你想簡化,你可以把它重寫爲'IF EXISTS(OBJECT_ID('tempdb ..#t1'))DROP TABLE#t1;'。 –
@PatrikBirgersson我明白了!但是,我並不想知道如何簡化這一行代碼。更多的是關於不能在分支IF ... ELSE塊中運行條件SELECT ... INTO #temptable ...與能夠在第一行中執行#temptable的條件DROP之間的不一致之處。拉傑什的回答清除了我所有的疑慮。 –