背景:有一個存儲過程用給定名稱的臨時表執行「填充」操作。該過程是通用的,因爲它檢查臨時表的模式,然後根據模式執行不同的「內容」。我明白,這有點奇怪,但我不願意改變它,因爲它在大多數情況下都可以正常工作,除了....爲什麼SQL Server在沒有時認爲臨時表已經存在?
如果我有一個存儲過程,它爲臨時表創建兩個不同的模式同名。從邏輯上講,它僅根據IF的哪個分支創建一個臨時表。問題是,當存儲過程由SQL Server檢查看起來它正在評估IF兩側
所以這個SQL失敗(這是有道理的,如果它檢查SQL語法):
IF (1=1)
BEGIN
CREATE TABLE #test
(
a BIGINT NOT NULL,
b BIGINT NOT NULL
)
END
ELSE
BEGIN
CREATE TABLE #test
(
a BIGINT NOT NULL,
b BIGINT NOT NULL,
c BIGINT NOT NULL
)
END
--exec SomeProcedureWhichDoesStuffWith#Test
DROP TABLE #test
,出現以下錯誤:
Msg 2714, Level 16, State 1, Line 14
There is already an object named '#test' in the database.
的IFS內跌幅榜的任何組合(之前或之後創建表DDL)似乎滿足SQL檢查。
任何想法,我可以做到這一點?例如,我可以告訴SQL不執行語法檢查,只是接受sproc原樣?
是感謝您的信息。不幸的是,它是在一個存儲過程中創建表,所以它必須在同一批次中(所以它不是GO)。 – 2011-01-28 13:20:05