簡體   English   中英

SQL IF ELSE插入#temp表問題

[英]SQL IF ELSE insert into #temp table problem

我不確定如何解決。 下面我有一個if else語句以及將數據插入到臨時表中。

IF @code= 'All'
    BEGIN
        DROP TABLE IF EXISTS #temp
        SELECT * 
        INTO #temp
        FROM #tempCity
    END
ELSE
    BEGIN
        DROP TABLE IF EXISTS #temp
        SELECT * 
        INTO #temp
        FROM #tempCity
        WHERE [City_Code] = @code
    END

值得注意的是,我確實需要表#temp在兩種情況下都具有相同的名稱,因為稍后我將使用它,並且插入的內容可能因情況而異,這就是為什么我沒有定義#temp

我收到一條錯誤消息,說明在這種情況下這是可以理解的:

There is already an object named '#temp' in the database.

有人知道我可以解決這個微妙問題的方法嗎?

為什么不簡單地使用布爾邏輯:

IF EXISTS (SELECT 1 FROM #temp)
   DROP TABLE #temp

SELECT * 
INTO #temp
FROM #tempCity
WHERE (@code= 'All' OR [City_Code] = @code);

首先,您可以免除IF

SELECT * 
INTO #temp
FROM #tempCity
WHERE @code = 'All' OR [City_Code] = @code;

其次,問題是編譯時錯誤。 即,由於表存在,所以SELECT INTO失敗。 您可以使用GO解決此問題:

DROP TABLE IF EXISTS #temp;
GO

SELECT * 
INTO #temp
FROM #tempCity
WHERE @code = 'All' OR [City_Code] = @code;

但這不適用於存儲過程,函數或觸發器。 另一種選擇是使用動態SQL:

DROP TABLE IF EXISTS #temp;

EXEC '
SELECT * 
INTO #temp
FROM #tempCity
WHERE @code = ''All'' OR [City_Code] = @code
';

但是我認為最好的解決方案是使用表變量。 這些超出范圍時將被刪除。 這意味着您可以聲明它們並假定它們不存在。 然后使用INSERT添加數據。

這實際上是編譯器錯誤。 如果您嘗試這樣的事情:

DROP TABLE #test;
GO

DECLARE @Code int;

IF @Code IS NULL BEGIN

    CREATE TABLE #test (ID int);
END ELSE BEGIN

    CREATE TABLE #test (ID int);
END

GO
DROP TABLE #test;

假設從開始不存在#test ,您將得到錯誤:

Msg 3701, Level 11, State 5, Line 1
Cannot drop the table '#test', because it does not exist or you do not have permission.
Msg 2714, Level 16, State 1, Line 11
There is already an object named '#test' in the database.
Msg 3701, Level 11, State 5, Line 15
Cannot drop the table '#test', because it does not exist or you do not have permission.

這實際上表明從未創建過#test 這是因為您嘗試在同#test語句中兩次創建#test ,而編譯器不喜歡它。

您最好使用這樣的WHERE作為結果:

SELECT *
INTO #Temp
FROM #TempCity
WHERE City_Code = @Code OR @Code = 'All;

盡管可以使用動態SQL,但臨時對象將僅保留在sp_executesql創建的會話中; 使它對您毫無用處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM