Уже существует объект, названный '##Temp' в базе данных

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

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

13
задан phoenies 13 August 2010 в 05:08
поделиться

4 ответа

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

IF (SELECT object_id('TempDB..##Temp')) IS NOT NULL
BEGIN
    DROP TABLE ##Temp
END
23
ответ дан 1 December 2019 в 21:23
поделиться

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

Используйте локальное соединение Таблицы #Temp (только одна # ) вместо них.

1
ответ дан 1 December 2019 в 21:23
поделиться

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

1
ответ дан 1 December 2019 в 21:23
поделиться

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

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

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

1
ответ дан 1 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: