Временные таблицы в SQL Server 2005 не удаляются автоматически - PullRequest
2 голосов
/ 22 октября 2009

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

#000E262B
#002334C4
#004E1D4D
#00583EEE
#00783A7F
#00832777
#00CD403A
#00E24ED3
#00F75D6C

Если я запускаю этот код:

if object_id('tempdb..#000E262B') is null   
print 'Does NOT exist!'

Я получаю:

Does NOT exist!

Если я это сделаю:

use tempdb
go
drop TABLE #000E262B

Я получаю ошибку:

Msg 3701, Level 11, State 5, Line 1
Cannot drop the table '#000E262B', because it does not exist or you do not have permission.

Я подключен к SQL Server как системный администратор. Использование SP3 64-bit. В настоящее время у меня есть более 1100 таких таблиц в базе данных tempdb, и я не могу от них избавиться. На сервере базы данных нет других пользователей.

В моем случае остановка и запуск SQL Server невозможны.

Спасибо!

Ответы [ 2 ]

8 голосов
/ 22 октября 2009

http://www.sqlservercentral.com/Forums/Topic456599-149-1.aspx

Если временные таблицы или табличные переменные часто используются, тогда вместо их отбрасывания SQL просто «усекает» их, оставляя определение. Это экономит усилия по воссозданию стола в следующий раз, когда это необходимо.

0 голосов
/ 22 октября 2009

Таблицы, созданные с префиксом #, доступны только для текущего соединения. Поэтому любое новое соединение, которое вы создадите, не сможет их видеть и, следовательно, не сможет их отбросить.

Как вы можете сказать, что они все еще существуют? Какую команду вы используете, чтобы выяснить это?

Правильно ли закрыто соединение, которое их создало? Если нет, то это может быть причиной того, почему они все еще существуют.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...