powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проверка существования временной таблицы?
21 сообщений из 21, страница 1 из 1
Проверка существования временной таблицы?
    #32095073
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, как выполнить проверку существования временной таблицы под пользователем у которого нет прав ни на что кроме как на запуск процедур?
Такой вариант не катит..

if exists (select * from tempdb.dbo.sysobjects
where name='##lots' )
drop table ##lots
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095084
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вариант не катит..

И почему же ?
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095095
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо правов к другой БД нету.. Потому что в текущей БД из хранимой процедуры доступ есть к чему угодно.. Конечно можно дать на read доступ к tempdb..
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095102
andsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не уверен что будет если у пользователя ни на что нет прав, но можно попробовать:
if (not object_id('tempdb..##lots') IS NULL)
drop table ##lots
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095105
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andsm Спасибо! Заработало -))
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095106
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
if exists (select * from tempdb.dbo.sysobjects 
where name='##lots' ) 
drop table ##lots

В этом куске вы смотрите в системые таблицы, а там написано реальное имя временной таблицы что то вроде '##lots_________________________3453', лучше воспользоваться функцией, пример
Код: plaintext
1.
2.
3.
4.
create table #test
(
	test int
)
select OBJECT_ID ('tempdb..#test')
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095110
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С правами Ден действительно что-то путает. tempdb - это глобальный ресурс.
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095113
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это под административными правами работает (а куда оно денется? -0)) ) А как под юзерскими правами начал...
if exists (select * from tempdb.dbo.sysobjects
where name='##lots' )
drop table ##lots
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095116
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для Glory, ну с прав по умолчанию у юзера вообще нету, как создается объект, даются права на его запуск... Я думал, что код внутри процедуры запускается с административными правми, но это блин не так...
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095122
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код внутри процедуры исполняется с правами создателя процедуры. Тут проблема не с правами была.
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095129
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для fima. А с какими? от DBO или текащего пользователя(допустим sa). Просто если бы исполняля код с правами создателя процедуры, то проблем доступа к tempdb.sysobjects не должно было быть...
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095145
andsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял, проблема была не с доступом а с тем, что в tempdb..sysobjects название временной таблицы хранится в формате:
название таблицы + сколько-то символов '_' + SessionID
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095156
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно с доступом, я начал тестировать базу с пользовательскими правами и всплыло, что ни к каким объектам из других баз из хранимых процедур я доступа не имею.. xp_send_mail, xp_cmdshell
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095188
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно с доступом, я начал тестировать базу с пользовательскими правами и всплыло, что ни к каким объектам из других баз из хранимых процедур я доступа не имею.. xp_send_mail, xp_cmdshell
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095200
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Ден
Давайте не будем равнять базы tempdb и master.

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

Вы конечно можете "поиграться" с правами guest или конкретного логина, но жить эти изменения будут до следующего рестарта сервера, т.к. при каждом рестарте tempdb создается заново
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095202
Фотография tpg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне вообще непонятна проверка на существование временной таблицы. Из кода процедуры разве не видно, что она существует? Или процедура ХХХ метров в длину и автору лень по коду проширнуться и найти, что у него по логике выполнения создавалась эта таблица?
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #32095214
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо! Вся проблема была в том, что базы системные базы и моя созданы разными пользователями, сменил владельца и все заработало.. Во как..
Для Glory - у меня у public права на все убиты... Нет никого, только группа обладающая правом на запуск хранимых процедур..
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Проверка существования временной таблицы?
    #40073406
haliff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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;
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #40073429
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
haliff,

ТС непонятно зачем полез в системные таблицы, для определения существования объекта можно использовать функцию object_id().
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #40073446
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стареем что ли? Раньше ТСа порвали бы на клочки за использование глобальных временных таблиц

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


Что касается сабжа, то выше уже всё сказали про функцию object_id.
...
Рейтинг: 0 / 0
Проверка существования временной таблицы?
    #40075938
haliff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я решал немного другую задачу. Отследить - выполняется процедура или нет.
Да, ошибся, просто перекликалась.
Кстати про старость - решение-то подкинете моей задачи?
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проверка существования временной таблицы?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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