Страница 1 из 1

Как можно проверить существование таблицы

Добавлено: 11 дек 2005, 15:17
Viktor Zull
Подскажите как можно проверить существование временной таблица
условите такого типа:
если ##Table2 существует, тогда drop table ##Table2
иначе ....

Добавлено: 11 дек 2005, 15:53
AiK
Viktor Zull, СУБД какая? В стандарте 99-го года зарезервировано ключевое слово exists.
Я знаю два варианта использования:

Код: Выделить всё

drop table if exists ##table2;
и

Код: Выделить всё

if exists (select 1 from tempdb.dbo.sysobjects where id = object_id('##table2')) 
drop table ##table2
Наверняка есть и ещё :)

Добавлено: 11 дек 2005, 16:02
Viktor Zull
СУБД MS SQL Server, думаю что первый вариант подойдет. Первый код я понимаю: удалить таблицу если она существует, а вот второй не совсем, немогли бы вы пояснить его

Добавлено: 11 дек 2005, 16:38
AiK
Как раз наоборот :) Может 2000-й и поймёт первый вариант, но что-то я сумлеваюсь :) А справки под рукой нет.

По второму поясняю: EXISTS проверяет возращаемый запросом резалсет на непустоту.
Записи обо всех объектах базы при их создании заносятся в системную таблицу sysobjects. Временные таблицы сосдаются в системной базе под названием tempdb. Владелец системной таблицы всегда dbo. ID объекта определяется при помощи системной функции object_id.

Добавлено: 11 дек 2005, 16:43
Viktor Zull
Проверил оба варианта первый что-то не работает, показывает синтаксическую ошибку. Со вторым запрос запускается но похоже таблица не удаляется. Мне вот что нужно сделать:

--Сначала проверить существует ли таблица ##Table2 и если существует удалить ее:
if exists (select 1 from tempdb.dbo.sysobjects where id = object_id('##table2'))
drop table ##table2

--Если не существует тогда выполнить:
select pole1,pole2,pole3 into ##Table2
from TableX
where(...)

Добавлено: 11 дек 2005, 18:00
AiK
М-дя. Для глобальных временных таблиц object_id NULL возвращает. Для локальных катит полное имя tempdb..#table2, а для глобальных - только если сделать use tempdb перед этим.
Значит замени условия на where name = '##table'