Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проверка существования временной таблицы?  [new]
Ден
Member

Откуда: Москва
Сообщений: 2079
Народ, как выполнить проверку существования временной таблицы под пользователем у которого нет прав ни на что кроме как на запуск процедур?
Такой вариант не катит..

if exists (select * from tempdb.dbo.sysobjects
where name='##lots' )
drop table ##lots
23 янв 03, 11:37    [113038]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Такой вариант не катит..

И почему же ?
23 янв 03, 11:44    [113053]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
Ден
Member

Откуда: Москва
Сообщений: 2079
Видимо правов к другой БД нету.. Потому что в текущей БД из хранимой процедуры доступ есть к чему угодно.. Конечно можно дать на read доступ к tempdb..
23 янв 03, 11:49    [113067]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
andsm
Member

Откуда: Москва
Сообщений: 1320
Блог
Не уверен что будет если у пользователя ни на что нет прав, но можно попробовать:
if (not object_id('tempdb..##lots') IS NULL)
drop table ##lots
23 янв 03, 11:54    [113079]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
Ден
Member

Откуда: Москва
Сообщений: 2079
andsm Спасибо! Заработало -))
23 янв 03, 11:56    [113085]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
fima
Member

Откуда: Москва
Сообщений: 583
if exists (select * from tempdb.dbo.sysobjects 

where name='##lots' )
drop table ##lots

В этом куске вы смотрите в системые таблицы, а там написано реальное имя временной таблицы что то вроде '##lots_________________________3453', лучше воспользоваться функцией, пример
create table #test

(
test int
)
select OBJECT_ID ('tempdb..#test')
23 янв 03, 11:57    [113089]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
Glory
Member

Откуда:
Сообщений: 104751
С правами Ден действительно что-то путает. tempdb - это глобальный ресурс.
23 янв 03, 11:59    [113094]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
Ден
Member

Откуда: Москва
Сообщений: 2079
Это под административными правами работает (а куда оно денется? -0)) ) А как под юзерскими правами начал...
if exists (select * from tempdb.dbo.sysobjects
where name='##lots' )
drop table ##lots
23 янв 03, 12:00    [113098]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
Ден
Member

Откуда: Москва
Сообщений: 2079
Для Glory, ну с прав по умолчанию у юзера вообще нету, как создается объект, даются права на его запуск... Я думал, что код внутри процедуры запускается с административными правми, но это блин не так...
23 янв 03, 12:03    [113102]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
fima
Member

Откуда: Москва
Сообщений: 583
код внутри процедуры исполняется с правами создателя процедуры. Тут проблема не с правами была.
23 янв 03, 12:06    [113110]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
Ден
Member

Откуда: Москва
Сообщений: 2079
для fima. А с какими? от DBO или текащего пользователя(допустим sa). Просто если бы исполняля код с правами создателя процедуры, то проблем доступа к tempdb.sysobjects не должно было быть...
23 янв 03, 12:15    [113131]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
andsm
Member

Откуда: Москва
Сообщений: 1320
Блог
Насколько я понял, проблема была не с доступом а с тем, что в tempdb..sysobjects название временной таблицы хранится в формате:
название таблицы + сколько-то символов '_' + SessionID
23 янв 03, 12:34    [113166]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
Ден
Member

Откуда: Москва
Сообщений: 2079
Именно с доступом, я начал тестировать базу с пользовательскими правами и всплыло, что ни к каким объектам из других баз из хранимых процедур я доступа не имею.. xp_send_mail, xp_cmdshell
23 янв 03, 12:41    [113188]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
Ден
Member

Откуда: Москва
Сообщений: 2079
Именно с доступом, я начал тестировать базу с пользовательскими правами и всплыло, что ни к каким объектам из других баз из хранимых процедур я доступа не имею.. xp_send_mail, xp_cmdshell
23 янв 03, 13:18    [113243]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
Glory
Member

Откуда:
Сообщений: 104751
2 Ден
Давайте не будем равнять базы tempdb и master.

В tempdb всегда существует пользователь guest, через которого любой логин сервера
- получает доступ к базе tempdb
- получает доступ к таблице sysobjects с правами SELECT

Вы конечно можете "поиграться" с правами guest или конкретного логина, но жить эти изменения будут до следующего рестарта сервера, т.к. при каждом рестарте tempdb создается заново
23 янв 03, 13:37    [113268]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А мне вообще непонятна проверка на существование временной таблицы. Из кода процедуры разве не видно, что она существует? Или процедура ХХХ метров в длину и автору лень по коду проширнуться и найти, что у него по логике выполнения создавалась эта таблица?
23 янв 03, 13:39    [113271]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
Ден
Member

Откуда: Москва
Сообщений: 2079
Всем спасибо! Вся проблема была в том, что базы системные базы и моя созданы разными пользователями, сменил владельца и все заработало.. Во как..
Для Glory - у меня у public права на все убиты... Нет никого, только группа обладающая правом на запуск хранимых процедур..
23 янв 03, 13:53    [113287]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Проверка существования временной таблицы?  [new]
haliff
Member

Откуда:
Сообщений: 17
aka necroposter

Ответов на заданный вопрос не нашел вообще. Все это не работает если кильнуть процесс.
Вот мое решение:

create or alter function [dbo].[check_procedure_run] ( @proc_name varchar(255) )
returns int
as
begin
declare @r int = 0

select top(1) @r = d.session_id
--, b.event_info
from sys.dm_exec_requests d
cross apply sys.dm_exec_input_buffer (d.session_id, 0) b
where b.event_info like '%' + @proc_name + '%' and d.session_id <> @@SPID;


return @r;
end;
27 май 21, 08:55    [22327795]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8690
haliff,

ТС непонятно зачем полез в системные таблицы, для определения существования объекта можно использовать функцию object_id().
27 май 21, 10:16    [22327821]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
Кесарь
Member

Откуда:
Сообщений: 651
Стареем что ли? Раньше ТСа порвали бы на клочки за использование глобальных временных таблиц

Даже интересно, что это за задача такая, что требовала именно такого решения.


Что касается сабжа, то выше уже всё сказали про функцию object_id.
27 май 21, 11:00    [22327839]     Ответить | Цитировать Сообщить модератору
 Re: Проверка существования временной таблицы?  [new]
haliff
Member

Откуда:
Сообщений: 17
Я решал немного другую задачу. Отследить - выполняется процедура или нет.
Да, ошибся, просто перекликалась.
Кстати про старость - решение-то подкинете моей задачи?
6 июн 21, 16:53    [22331936]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить