powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как мне определить, существует ли временная таблица в данный момент?
12 сообщений из 12, страница 1 из 1
Как мне определить, существует ли временная таблица в данный момент?
    #32009493
SergDanceHits
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуация следующая.
есть StoredProcedure1, в ней создается #tmpTable.
В ней же вызывается еще одна StoredProcedure2, которая в своем теле использует данные из #tmpTable. Экспериментальным путем установленно, что StoredProcedure2 "видит" данные из #tmpTable (как я понимаю, потому что это все таки одна транзакция). Короче говоря, все работает. Но мне хотелось бы в StoredProcedure2 все таки проверять наличие #tmpTable в базе, т.к. StoredProcedure2 я хочу вызывать и из других процедур, где #tmpTable может и не создаваться. Насколько я
знаю, #tmpTable должна храниться где то в TempDB. попробовал поискать в sysobjects, нифига не нашел:
\nif not exists (select * from sysobjects where id = object_id(N'[dbo].[#tmpTable]')) begin
print '[dbo].[#tmpTable] is not absent'
create table #tmpTable (SubID int)
insert into #tmpTable Values (@Sub)
.......
end
...
Рейтинг: 0 / 0
Как мне определить, существует ли временная таблица в данный момент?
    #32009495
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Временные таблицы созданные в хранимой проц существуют только пока выполняется проц. После ее выполнения искать временную таблицу бесполезно.
...
Рейтинг: 0 / 0
Как мне определить, существует ли временная таблица в данный момент?
    #32009496
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
If object_ID('tempdb..#tmpTable') Is not Null
...
Рейтинг: 0 / 0
Как мне определить, существует ли временная таблица в данный момент?
    #32009622
SergDanceHits
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел
Спасибо, твой вариант срабатывает. Есть только одно НО.
А если #tmpTable создал другой юзер и она на момент проверки существует? (Оба одновременно запустили StoredProcedure1)Получится глюк .
...
Рейтинг: 0 / 0
Как мне определить, существует ли временная таблица в данный момент?
    #32009623
AlexanderVS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глюка не получится, не переживай, на самом деле имена #tmp таблиц уникальны, точно не помню, но что-то вроде #tmp____________001.

Всех благ, Александр.
...
Рейтинг: 0 / 0
Как мне определить, существует ли временная таблица в данный момент?
    #32009625
SergDanceHits
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexanderVS
Тогда выходит, что на самом деле проверяется не TempDB..#tmpTable, а другая таблица? Ведь 2 юзера проверяют наличие вроде как одной и той же таблицы
\n If object_ID('tempdb..#tmpTable') Is not Null
...

Что то у меня сомнения на этот счет... Поправьте, если я не прав
...
Рейтинг: 0 / 0
Как мне определить, существует ли временная таблица в данный момент?
    #32009626
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Тогда выходит, что на самом деле проверяется не TempDB..#tmpTable, а другая таблица? Ведь 2 юзера проверяют наличие вроде как одной и той же таблицы

2 юзера проверяют наличие одной и той же таблицы, но тем не менее для каждого юзера эта таблица своя, потому что временные таблицы существуют в контексте соединения, и посему Slava не прав, а AlexanderVS прав.
Если Вам нужна глобальная временная таблица, то ее имя должно начинаться с ##, тонкостей механизма работы с такими таблицами я не знаю, так как они мне еще ни разу не понадобились
...
Рейтинг: 0 / 0
Как мне определить, существует ли временная таблица в данный момент?
    #32009633
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SergDanceHits: никакого глюка не произойдет, потому что object_id() и select id from sysobjects where name = '...' - это не одно и то же. Функция object_id в курсе, что существуют временные таблицы и корректно с ними работает. Проверить это просто: создаешь на двух коннектах временную таблицу #t1 и делаешь select object_id('tempdb..#t1'). ID'шники, которые ты получишь, не совпадают. ЧТД.
...
Рейтинг: 0 / 0
Как мне определить, существует ли временная таблица в данный момент?
    #32009661
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Genady
>2 юзера проверяют наличие одной и той же таблицы, но тем не менее для каждого юзера эта таблица своя, потому что временные таблицы существуют в контексте соединения, и посему Slava не прав, а AlexanderVS прав.

Slava отчасти прав (или только от части не прав). Дело в том, что локальная временная таблица, созданная в процедуре, будет убита по окончании работы этой процедуры. Но если из процедуры происходит вызов других процедур, то эта табличка им отчетливо видна. А если создать локальную временную таблицу вне процедуры, то она будет болтаться пока существует сессия в которой таблица создана или пока ее явно не прибить.
...
Рейтинг: 0 / 0
Как мне определить, существует ли временная таблица в данный момент?
    #32009664
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Павел
2 Slava

Провел экспериментик и вынужден признать, что вы правы, при отработке SP временная таблица удаляется, жаль, сейчас нет времени поточнее выяснить этот вопрос, но у меня как то были проблемы с тем, что я забыл дропнуть временные таблицы в SP. Ну и в BOL четко написано, что временная таблица живет столько же, сколько и коннект. В общем как то это пока для меня не ясно.
...
Рейтинг: 0 / 0
Как мне определить, существует ли временная таблица в данный момент?
    #32009668
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Genady:
Алгоритм простой - временная таблица может быть создана:
1. в батче из коннекта. Живёт до закрытия коннекта. Видна отовсюду в этом коннекте (из всех батчей, хр. процедур, триггеров и т.д.)
2. в процедуре. Живёт до закрытия коннекта. Видна из этой процедуры (разумеется, в пределах коннекта), и из тех, которые вызываются ниже, в т.ч. из триггеров)
...
Рейтинг: 0 / 0
Как мне определить, существует ли временная таблица в данный момент?
    #32009669
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, очепятка

Алгоритм простой - временная таблица может быть создана:
1. в батче из коннекта. Живёт до закрытия коннекта. Видна отовсюду в этом коннекте (из всех батчей, хр. процедур, триггеров и т.д.)
2. в процедуре. Живёт до завершения процедуры. Видна из этой процедуры (разумеется, в пределах коннекта), и из тех, которые вызываются ниже, в т.ч. из триггеров)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как мне определить, существует ли временная таблица в данный момент?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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