Это на самом деле ошибка компилятора. Если вы попробуете что-то вроде этого:
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
дважды в одном выражении, а компилятору это не нравится.
Вам, вероятно, лучше использовать WHERE
, как это в результате:
SELECT *
INTO #Temp
FROM #TempCity
WHERE City_Code = @Code OR @Code = 'All;
Хотя вы можете использовать динамический SQL, временный объект будет сохраняться только в сеансе, созданном sp_executesql
; делая это бесполезным для вас.