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

Откуда:
Сообщений: 3947
В базе все для всех ролей описана доступность и тип операций над таблицами и их полями
Также в базе есть сохраненные процедуры и перед их использованием необходимо проверить не нарушается ли конфиденциальность если данную процедуру "назначают" конкретной роли

Возможно ли каким-либо образом определить какие таблицы и их поля участвуют в запросах внутри процедуры?
11 ноя 11, 01:19    [11578789]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли определить какие таблицы и поля участвуют в запросах в процедуре?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
ну SQL Server Management Studio жу ка-то определяет, когда на таблице нажать Dependencies
другое дело, что если в процедуре динамический SQL, то хреново
11 ноя 11, 01:31    [11578821]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли определить какие таблицы и поля участвуют в запросах в процедуре?  [new]
sp
Member

Откуда:
Сообщений: 3947
Паганель
ну SQL Server Management Studio жу ка-то определяет, когда на таблице нажать Dependencies
другое дело, что если в процедуре динамический SQL, то хреново


Ну еслиб SQL Server Management Studio не смог определить тогда уж не знаю кто мог бы )))
В этом и вопрос - как мне определить?
11 ноя 11, 01:33    [11578827]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли определить какие таблицы и поля участвуют в запросах в процедуре?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
А вот как он определяет?
Наверное, какие-то запросы в БД для этого посылает?
Ну так перехватите их профилером, какие проблемы?
11 ноя 11, 01:39    [11578837]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли определить какие таблицы и поля участвуют в запросах в процедуре?  [new]
sp
Member

Откуда:
Сообщений: 3947
Паганель
А вот как он определяет?
Наверное, какие-то запросы в БД для этого посылает?
Ну так перехватите их профилером, какие проблемы?


Я конечно не шпион, но попробую...)
11 ноя 11, 01:50    [11578850]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли определить какие таблицы и поля участвуют в запросах в процедуре?  [new]
sp
Member

Откуда:
Сообщений: 3947
Паганель
А вот как он определяет?
Наверное, какие-то запросы в БД для этого посылает?
Ну так перехватите их профилером, какие проблемы?


Да а в зависимостях не отображаются задействованные поля ((
Ужас сколько кода генерит студия!!!!! а где-нить чо-нить по-проще почитать нету???
11 ноя 11, 01:54    [11578857]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли определить какие таблицы и поля участвуют в запросах в процедуре?  [new]
AlphaDog
Member

Откуда: in the middle of nowhere
Сообщений: 532
sp
Ужас сколько кода генерит студия!!!!! а где-нить чо-нить по-проще почитать нету???


Рекомендую поработать с чем-нибудь типа Remedy - влюбитесь в код генереный студией как студент-первокурсник в прима-балерину.
11 ноя 11, 02:33    [11578920]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли определить какие таблицы и поля участвуют в запросах в процедуре?  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
[quot sp]
Паганель
а где-нить чо-нить по-проще почитать нету???

Вот например. Начните с sys.objects и sys.sql_modules.
11 ноя 11, 09:58    [11579470]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли определить какие таблицы и поля участвуют в запросах в процедуре?  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
Да что за чертовщина? Отвечал, естественно sp.
11 ноя 11, 10:01    [11579485]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли определить какие таблицы и поля участвуют в запросах в процедуре?  [new]
hpv
Member

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

Впринципе возможно.
Если распарсить правильно план выполнения процедуры.
Там, если не ошибаюсь, будут все задействованные поля и таблицы.

P.S. Когда в SSMS проверяешь зависимости, то не показываются ни поля таблиц, ни таблицы из других баз.
11 ноя 11, 10:49    [11579822]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли определить какие таблицы и поля участвуют в запросах в процедуре?  [new]
sp
Member

Откуда:
Сообщений: 3947
hpv
sp,

Впринципе возможно.
Если распарсить правильно план выполнения процедуры.
Там, если не ошибаюсь, будут все задействованные поля и таблицы.

P.S. Когда в SSMS проверяешь зависимости, то не показываются ни поля таблиц, ни таблицы из других баз.


А как программно получить план? ткните где хоть порыться?
11 ноя 11, 12:20    [11580663]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли определить какие таблицы и поля участвуют в запросах в процедуре?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
sp,

планы то получить можно, например отсюда: sys.dm_exec_cached_plans, sys.dm_exec_query_plan.
Но мне кажется вы пошли по неверному пути, т.к. мне кажется что парсинг плана это нетривиальная задача + перед выполнением процедуры ее плана может вовсе не быть в кэше.
Вы лучше посмотрите в сторону зависимостей, там в разных версиях сиквела за это разные представления отвечают, выбирайте что нужно вам и смотрите.
sys.sysdepends
sys.sql_dependencies
sys.sql_expression_dependencies
sp_depends
и т.д. там дальше сами по документации разберетесь. + можно еще посмотреть в сторону поиска по коду, если известно имя таблицы и нужно проверить есть ли она в коде хп, но тут уже понятно работа как с текстом, если не напишите иное, т.е. если имя таблицы встретится в комментариях - оно тоже "найдется" по тексту.
11 ноя 11, 12:54    [11580950]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли определить какие таблицы и поля участвуют в запросах в процедуре?  [new]
Humanitis
Member

Откуда:
Сообщений: 4
Click
11 ноя 11, 12:55    [11580965]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли определить какие таблицы и поля участвуют в запросах в процедуре?  [new]
sp
Member

Откуда:
Сообщений: 3947
SomewhereSomehow
sp,

планы то получить можно, например отсюда: sys.dm_exec_cached_plans, sys.dm_exec_query_plan.
Но мне кажется вы пошли по неверному пути, т.к. мне кажется что парсинг плана это нетривиальная задача + перед выполнением процедуры ее плана может вовсе не быть в кэше.
Вы лучше посмотрите в сторону зависимостей, там в разных версиях сиквела за это разные представления отвечают, выбирайте что нужно вам и смотрите.
sys.sysdepends
sys.sql_dependencies
sys.sql_expression_dependencies
sp_depends
и т.д. там дальше сами по документации разберетесь. + можно еще посмотреть в сторону поиска по коду, если известно имя таблицы и нужно проверить есть ли она в коде хп, но тут уже понятно работа как с текстом, если не напишите иное, т.е. если имя таблицы встретится в комментариях - оно тоже "найдется" по тексту.


Спасибо за аргументированный совет!
11 ноя 11, 13:30    [11581321]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли определить какие таблицы и поля участвуют в запросах в процедуре?  [new]
Сергей Мишин
Member

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

Только учтите, что sys.sysdepends и sys.sql_dependencies не вернут связей, если создать хп с несуществующей таблицей, а потом саму таблицу.
11 ноя 11, 20:49    [11585181]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить