Как проверить существование временной таблицы
Самородов Федор Анатольевич: Как проверить существование временной таблицы
SQL Server умеет работать c временными таблицами. Названия у таких таблиц начинаются с одной или с двух решёток (#). Временные таблицы, очевидно, придуманы для того, чтобы хранить в них данные временно. Например, для сохранения промежуточных результатов каких-либо вычислений. Или для передачи каких-то данных от одного процесса другому.
Иногда требуется проверить, была ли уже создана определённая временная таблица или нет. Как это правильно сделать?
Если речь идёт о глобальной временной таблице, то проверить её наличие можно традиционным способом - заглянув в список таблиц. Только не забудьте сделать поправку на то, что все временные таблицы - и глобальные и локальные - создаются не в текущей пользовательской базе данных, а в системной базе TempDB.
Посмотрите на пример. Один процесс создал глобальную временную таблицу. Теперь этот и все другие процессы могут обращаться к ней, как к обыкновенной таблице. В том числе, они увидят её в системных каталогах sys.Tables и Information_Schema.Tables.
Годится. Однако, такой механизм проверки не сработает, если речь идёт о локальных временных таблицах. Ведь такие таблицы создаются индивидуально для каждого сеанса, и в разных сеансах могут оказаться таблицы с одинаковыми названиями. Чтобы не было конфликта имён, сервер переименовывает локальные таблицы, создавая их в TempDB.
Вот я создаю в двух сеансах локальные временные таблицы с одинаковыми названиями. В каждом сеансе сервер отличает свою таблицу от чужих, но в системных каталогах они видны все сразу:
Если посмотреть внимательнее, то можно заметить, что к названиям таблиц сервер дописывает уникальное окончание, по которому он и определяет чья это таблица:
Возиться с этими окончаниями в SQL-коде не хотелось бы. И не нужно. Потому что у нас есть функция Object_ID, которая автоматически выбирает нужную таблицу:
Если объект с заданным названиям существует, то функция Object_ID вернёт его идентификатор, а если нет - NULL. Таким образом мы сможем удобно и надёжно проверить наличие даже такого необычного объекта, как локальная временная таблица:
У этой функции есть необязательный второй параметр, который можно использовать для указания конкретного типа объекта. "U" означает, что мы ищем именно таблицу.
Подробнее об этом Вы сможете узнать на курсах SQL Server
Ближайшие группы
Заказ добавлен в Корзину.
Для завершения оформления, пожалуйста,
перейдите в Корзину!
От какого лица вы будете оплачивать обучение?