Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как мне определить, существует ли временная таблица в данный момент?
|
|||
|---|---|---|---|
|
#18+
Ситуация следующая. есть 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2001, 01:50 |
|
||
|
Как мне определить, существует ли временная таблица в данный момент?
|
|||
|---|---|---|---|
|
#18+
Временные таблицы созданные в хранимой проц существуют только пока выполняется проц. После ее выполнения искать временную таблицу бесполезно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2001, 02:51 |
|
||
|
Как мне определить, существует ли временная таблица в данный момент?
|
|||
|---|---|---|---|
|
#18+
If object_ID('tempdb..#tmpTable') Is not Null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2001, 04:19 |
|
||
|
Как мне определить, существует ли временная таблица в данный момент?
|
|||
|---|---|---|---|
|
#18+
Павел Спасибо, твой вариант срабатывает. Есть только одно НО. А если #tmpTable создал другой юзер и она на момент проверки существует? (Оба одновременно запустили StoredProcedure1)Получится глюк . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2001, 22:59 |
|
||
|
Как мне определить, существует ли временная таблица в данный момент?
|
|||
|---|---|---|---|
|
#18+
Глюка не получится, не переживай, на самом деле имена #tmp таблиц уникальны, точно не помню, но что-то вроде #tmp____________001. Всех благ, Александр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2001, 01:30 |
|
||
|
Как мне определить, существует ли временная таблица в данный момент?
|
|||
|---|---|---|---|
|
#18+
AlexanderVS Тогда выходит, что на самом деле проверяется не TempDB..#tmpTable, а другая таблица? Ведь 2 юзера проверяют наличие вроде как одной и той же таблицы \n If object_ID('tempdb..#tmpTable') Is not Null ... Что то у меня сомнения на этот счет... Поправьте, если я не прав ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2001, 04:47 |
|
||
|
Как мне определить, существует ли временная таблица в данный момент?
|
|||
|---|---|---|---|
|
#18+
> Тогда выходит, что на самом деле проверяется не TempDB..#tmpTable, а другая таблица? Ведь 2 юзера проверяют наличие вроде как одной и той же таблицы 2 юзера проверяют наличие одной и той же таблицы, но тем не менее для каждого юзера эта таблица своя, потому что временные таблицы существуют в контексте соединения, и посему Slava не прав, а AlexanderVS прав. Если Вам нужна глобальная временная таблица, то ее имя должно начинаться с ##, тонкостей механизма работы с такими таблицами я не знаю, так как они мне еще ни разу не понадобились ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2001, 05:12 |
|
||
|
Как мне определить, существует ли временная таблица в данный момент?
|
|||
|---|---|---|---|
|
#18+
2 SergDanceHits: никакого глюка не произойдет, потому что object_id() и select id from sysobjects where name = '...' - это не одно и то же. Функция object_id в курсе, что существуют временные таблицы и корректно с ними работает. Проверить это просто: создаешь на двух коннектах временную таблицу #t1 и делаешь select object_id('tempdb..#t1'). ID'шники, которые ты получишь, не совпадают. ЧТД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2001, 06:35 |
|
||
|
Как мне определить, существует ли временная таблица в данный момент?
|
|||
|---|---|---|---|
|
#18+
2 Genady >2 юзера проверяют наличие одной и той же таблицы, но тем не менее для каждого юзера эта таблица своя, потому что временные таблицы существуют в контексте соединения, и посему Slava не прав, а AlexanderVS прав. Slava отчасти прав (или только от части не прав). Дело в том, что локальная временная таблица, созданная в процедуре, будет убита по окончании работы этой процедуры. Но если из процедуры происходит вызов других процедур, то эта табличка им отчетливо видна. А если создать локальную временную таблицу вне процедуры, то она будет болтаться пока существует сессия в которой таблица создана или пока ее явно не прибить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2001, 10:34 |
|
||
|
Как мне определить, существует ли временная таблица в данный момент?
|
|||
|---|---|---|---|
|
#18+
2 Павел 2 Slava Провел экспериментик и вынужден признать, что вы правы, при отработке SP временная таблица удаляется, жаль, сейчас нет времени поточнее выяснить этот вопрос, но у меня как то были проблемы с тем, что я забыл дропнуть временные таблицы в SP. Ну и в BOL четко написано, что временная таблица живет столько же, сколько и коннект. В общем как то это пока для меня не ясно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2001, 11:21 |
|
||
|
Как мне определить, существует ли временная таблица в данный момент?
|
|||
|---|---|---|---|
|
#18+
2Genady: Алгоритм простой - временная таблица может быть создана: 1. в батче из коннекта. Живёт до закрытия коннекта. Видна отовсюду в этом коннекте (из всех батчей, хр. процедур, триггеров и т.д.) 2. в процедуре. Живёт до закрытия коннекта. Видна из этой процедуры (разумеется, в пределах коннекта), и из тех, которые вызываются ниже, в т.ч. из триггеров) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2001, 12:40 |
|
||
|
Как мне определить, существует ли временная таблица в данный момент?
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, очепятка Алгоритм простой - временная таблица может быть создана: 1. в батче из коннекта. Живёт до закрытия коннекта. Видна отовсюду в этом коннекте (из всех батчей, хр. процедур, триггеров и т.д.) 2. в процедуре. Живёт до завершения процедуры. Видна из этой процедуры (разумеется, в пределах коннекта), и из тех, которые вызываются ниже, в т.ч. из триггеров) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2001, 12:44 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32009623&tid=1826177]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 249ms |
| total: | 406ms |

| 0 / 0 |
