Корзина

Корзина

Частным лицам +7 (495) 232-32-16

Слушателям
от организации
+7 (495) 780-48-44

+7 (495) 780-48-49

Частным лицам +7 (495) 232-32-16

Слушателям
от организации
+7 (495) 780-48-44

+7 (495) 780-48-49

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

Самородов Федор Анатольевич: Как проверить существование временной таблицы

СФА

SQL Server умеет работать c временными таблицами. Названия у таких таблиц начинаются с одной или с двух решёток (#). Временные таблицы, очевидно, придуманы для того, чтобы хранить в них данные временно. Например, для сохранения промежуточных результатов каких-либо вычислений. Или для передачи каких-то данных от одного процесса другому.

Иногда требуется проверить, была ли уже создана определённая временная таблица или нет. Как это правильно сделать?

Если речь идёт о глобальной временной таблице, то проверить её наличие можно традиционным способом - заглянув в список таблиц. Только не забудьте сделать поправку на то, что все временные таблицы - и глобальные и локальные - создаются не в текущей пользовательской базе данных, а в системной базе TempDB.

Посмотрите на пример. Один процесс создал глобальную временную таблицу. Теперь этот и все другие процессы могут обращаться к ней, как к обыкновенной таблице. В том числе, они увидят её в системных каталогах sys.Tables и Information_Schema.Tables.

SQL Server: Как проверить существование глобальной временной таблицы

Годится. Однако, такой механизм проверки не сработает, если речь идёт о локальных временных таблицах. Ведь такие таблицы создаются индивидуально для каждого сеанса, и в разных сеансах могут оказаться таблицы с одинаковыми названиями. Чтобы не было конфликта имён, сервер переименовывает локальные таблицы, создавая их в TempDB.

Вот я создаю в двух сеансах локальные временные таблицы с одинаковыми названиями. В каждом сеансе сервер отличает свою таблицу от чужих, но в системных каталогах они видны все сразу:

SQL Server: Локальные временные таблицы с одинаковыми именами

Если посмотреть внимательнее, то можно заметить, что к названиям таблиц сервер дописывает уникальное окончание, по которому он и определяет чья это таблица:

SQL Server: Временные таблицы создаются в баде TempDB

Возиться с этими окончаниями в SQL-коде не хотелось бы. И не нужно. Потому что у нас есть функция Object_ID, которая автоматически выбирает нужную таблицу:

SQL Server: Функция Object_ID

Если объект с заданным названиям существует, то функция Object_ID вернёт его идентификатор, а если нет - NULL. Таким образом мы сможем удобно и надёжно проверить наличие даже такого необычного объекта, как локальная временная таблица:

SQL Server: Функция Object_ID

У этой функции есть необязательный второй параметр, который можно использовать для указания конкретного типа объекта. "U" означает, что мы ищем именно таблицу.

Подробнее об этом Вы сможете узнать на курсах SQL Server

envelope

Спасибо! Вам на e-mail отправлено письмо со ссылкой для подтверждения

Если письмо не пришло, поищите его в папке со спамом или повторите подписку

email-checked.png

Вы подписались на рассылку

Спасибо за обращение! Ваш менеджер свяжется с Вами в течение нескольких минут.