powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как проверить существование временной таблицы ?
10 сообщений из 10, страница 1 из 1
Как проверить существование временной таблицы ?
    #32005166
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, сабж.

Проверка существования "обычной" таблицы - что-то типа
select count(*) from sysobjects where id = object_id('PersistTable')

А где хранится информация о временных таблицах ?
Конечно, можно попробовать сделать выборку из нее и если произойдет ошибка, то ее это значит, что таблицы нет. Но хотелось бы более приемлемый вариант, без обвешивания проверками.
...
Рейтинг: 0 / 0
Как проверить существование временной таблицы ?
    #32005171
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
If object_ID('tempdb..#tmp') Is Not Null
...
Рейтинг: 0 / 0
Как проверить существование временной таблицы ?
    #32005174
Dankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
листай tempdb..sysobjects
...
Рейтинг: 0 / 0
Как проверить существование временной таблицы ?
    #32005177
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
...
Рейтинг: 0 / 0
Как проверить существование временной таблицы ?
    #32005183
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем поможет tempdb..sysobjects?
...
Рейтинг: 0 / 0
Как проверить существование временной таблицы ?
    #32005186
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оба способа работают.

select object_id('tempdb..#changeslog')
select id from tempdb..sysobjects where id = object_id('tempdb..#changeslog')

Так что существование таблицы можно как хочешь проверять. А tempdb..sysobjects нужна для того же, что и sysobjects в любой DB
Данные из нее брать
...
Рейтинг: 0 / 0
Как проверить существование временной таблицы ?
    #32005241
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ответив на "листай tempdb..sysobjects" я имел в виду, что не работает select ... from tempdb..sysobjects where Name = '...'
...
Рейтинг: 0 / 0
Как проверить существование временной таблицы ?
    #32005244
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, ясен пень, where name = '...' работать не будет. Для временных таблиц реальные имена, которые используются в sysobjects не совпадают с пользовательскими. Насколько я понимаю, это сделано для того, чтобы временные таблицы были ограничены областью видимости данного коннекта.
Создадим таблицу #t1. Если выполнить запрос select * from tempdb..sysobjects where id = object_id('tempdb..#t1') в этом же коннекте и в другом, то в первом вернется одна строчка, а в другом - нет. А вот если выполнить запрос select * from tempdb..sysobjects where name like '#t1%', то результат будет прекрасно виден в обоих коннектах! Причем можно полюбоваться на сформированное реальное имя временной таблицы.
...
Рейтинг: 0 / 0
Как проверить существование временной таблицы ?
    #32005245
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если есть еще таблица #t11?
...
Рейтинг: 0 / 0
Как проверить существование временной таблицы ?
    #32005248
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно поэтому не надо селектить напрямую, используя "name like '#t1%'", а нужно использовать object_id('tempdb..#t1'), который вернет все корректно.
Это просто был пример, чтобы проиллюстрировать работу сервера с временными таблицами... Как они физически выглядят.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как проверить существование временной таблицы ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]