У меня есть хранимая процедура на SQL Server 2000. Это содержит:
select ... into ##Temp ...
...
drop table ##Temp
Когда я выполняю хранимую процедуру с ADO во второй раз, когда это запрашивает:
Уже существует объект, названный '##Temp' в базе данных.
Кто-либо мог любезно сказать мне что случилось?
Вам следует переписать вашу хранимую процедуру для удаления временной таблицы, если она существует, тогда у вас никогда не будет этой проблемы
IF (SELECT object_id('TempDB..##Temp')) IS NOT NULL
BEGIN
DROP TABLE ##Temp
END
Поскольку вы выбрали использование глобальной временной таблицы ## Temp
, она видна для всех соединений SQL в любой момент времени. Очевидно, что пока хранимая процедура выполняется для одного соединения, второе соединение входит и пытается создать еще одно ## Temp
, но оно уже существует ....
Используйте локальное соединение Таблицы #Temp
(только одна #
) вместо них.
О, это все моя вина. Я дважды позвонил на ИП через одно соединение по ошибке.
Вот почему он всегда сообщает об ошибке при повторном вызове.
Конечно, вы не узнаете этого, прочитав мое описание. Извините, ребята ...
Вы используете глобальную временную таблицу, на что указывает ## в начале имени таблицы. Это означает, что к таблице могут обращаться несколько сеансов.
Вероятно, у вас открыто соединение, которое создало таблицу, но не смогло ее отбросить. Вы уверены, что при первом запуске ADO таблица действительно удаляется. Может быть, произошел сбой, или управление потоком в процедуре пропустило оператор drop?
Вы можете протестировать процедуру в SQL Server Enterprise Manager, чтобы узнать, сообщает ли он о каких-либо ошибках.