Подтвердить что ты не робот

В базе уже есть объект с именем "## Temp"

У меня есть хранимая процедура на SQL Server 2000. Она содержит:
select ... into ##Temp ...
...
drop table ##Temp

Когда я запускаю хранимую процедуру с ADO второй раз, она запрашивает:
В базе уже есть объект с именем "## Temp".
Может ли кто-нибудь любезно сказать мне, что случилось?

4b9b3361

Ответ 1

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

IF (SELECT object_id('TempDB..##Temp')) IS NOT NULL
BEGIN
    DROP TABLE ##Temp
END

Ответ 2

Поскольку вы решили использовать глобальную временную таблицу ##Temp, она будет видна для всех подключений SQL в любой момент времени. Очевидно, что, пока хранимый proc работает для одного соединения, приходит второе соединение и пытается создать еще один ##Temp, но он уже существует....

Вместо этого используйте локальные таблицы #Temp для подключения (только один #).

Ответ 3

О, это все по моей вине. Я вызвал SP дважды по одному соединению по ошибке.
Вот почему он всегда сообщает об ошибке при вызове во второй раз.
Конечно, вы не узнаете этого, прочитав мое описание. Извините, ребята...

Ответ 4

Для меня это решение работает:

IF (SELECT object_id ='#Temp') IS NOT NULL
BEGIN
   DROP TABLE #Temp
END

Ответ 5

Используется глобальная временная таблица, обозначенная символом ## в начале имени таблицы. Это означает, что несколько сеансов могут получить доступ к таблице.

Вероятно, у вас открыто соединение, которое создало таблицу, но не удалось ее удалить. Вы уверены, что первый запуск ADO фактически удалит таблицу. Может ли он провалиться, или управление потоком в процедуре пропустило оператор drop?

Вы можете протестировать процедуру в SQL Server Enterprise Manager, чтобы узнать, не сообщают ли она о каких-либо ошибках.