Удаление глобальных временных таблиц (## tempTable) в SQL Server - PullRequest
19 голосов
/ 27 марта 2009

SQL-сервер автоматически удаляет их после определенного периода бездействия, или мне нужно беспокоиться об их автоматической очистке? Если да, то как мне запросить список таблиц для очистки?

Ответы [ 3 ]

24 голосов
/ 27 марта 2009

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

Например, если ваша платформа использует пул соединений, то есть соединения никогда не могут быть сброшены, значит, ваши временные таблицы также все еще существуют?

Чтобы проверить наличие временной таблицы, вы можете использовать следующую инструкцию / check.

if object_id('tempdb..##temptbl') is not null
begin
    drop table ##temptbl
end
16 голосов
/ 27 марта 2009

Локальные временные таблицы уничтожаются при закрытии соединения с SQL Server. Нет необходимости вручную очищать их при нормальных обстоятельствах. Если вы поддерживаете постоянное соединение или пул соединений, вы можете захотеть отказаться от временных таблиц сразу после использования.

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

4 голосов
/ 25 апреля 2011

В ответ на вторую часть вашего вопроса, чтобы запросить список таблиц для очистки, попробуйте этот запрос:

SELECT * FROM tempdb..sysobjects

Это перечислит все текущие глобальные временные таблицы

...