Как удалить временную таблицу - PullRequest
0 голосов
/ 02 октября 2019

Временная таблица создается с помощью инструкции SELECT .. INTO

SELECT *
    INTO #MyTempTable
FROM ...

В разделе Базы данных, tempdb, Временные таблицы я вижу таблицу временных данных dbo. # MyTempTable ____________________ 0000000016CA

Теперь я хочубрось стол. Я попробовал следующее:

DROP TABLE IF EXISTS #MyTempTable

И

IF OBJECT_ID('tempdb..#MyTempTable') IS NOT NULL 
BEGIN 
    DROP TABLE #MyTempTable 
END

Оба не удалили таблицу

Выбор возвращает NULL:

SELECT OBJECT_ID('tempdb..#MyTempTable') 

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Обратите внимание на имя проверенной таблицы и удаленной таблицы .. #MyTempTable против #lu_sensor_name_19

Это работает для меня:

IF OBJECT_ID('tempdb..#MyTempTable') IS NOT NULL DROP TABLE #MyTempTable;

, если это не работает дляя думаю, что ваша проблема связана с областью действия и / или видимостью вашей временной таблицы.

временные таблицы существуют только в том сеансе, в котором они были созданы. Я полагаю, вы удаляете временную таблицукоторый не существует, amymore или временная таблица в другом сеансе.

сначала вы должны проверить, активен ли сеанс, в котором вы делаете SELECT INTO, когда вы хотите удалить таблицу.

если ответ «да», проверьте, выпадаете ли вы из того же сеанса или из другого.

во втором случае вы можете решить проблему, используя ##MyTempTable вместо #MyTempTable

в противном случае это означает, что что-то или кто-то другой уже уронил его

0 голосов
/ 02 октября 2019

Вы можете использовать трюк с OBJECT_ID .
Но затем убедитесь, что таблица, проверенная на наличие, совпадает с таблицей, которую вы сбросили.

IF OBJECT_ID('tempdb..#MyTempTable', 'U') IS NOT NULL 
BEGIN 
    DROP TABLE #MyTempTable;
END

Или упрощенно:

IF OBJECT_ID('tempdb..#MyTempTable', 'U') IS NOT NULL 
    DROP TABLE #MyTempTable;
...