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

Откуда:
Сообщений: 226
Товарищи, добрый вечер.
Подскажите, пожалуйста, есть ли такой запрос, который бы искал: из какой процедуры запускается нужная мне процедура?
То есть у меня есть процедура, я знаю ее название, а какой процедурой она запускается я, к примеру не знаю, однако хотелось бы узнать.
благодарю.
27 май 19, 21:38    [21895190]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
use MyDB;
select * from sys.dm_sql_referencing_entities('MyProcedure', 'object');
27 май 19, 21:51    [21895194]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
dermama
Member

Откуда:
Сообщений: 226
invm
use MyDB;
select * from sys.dm_sql_referencing_entities('MyProcedure', 'object');


спасибо, правильно ли я понимаю: My procedure - процедура которую я ищу, а object?
27 май 19, 21:56    [21895201]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
komrad
Member

Откуда:
Сообщений: 5245
dermama
invm
use MyDB;
select * from sys.dm_sql_referencing_entities('MyProcedure', 'object');


спасибо, правильно ли я понимаю: My procedure - процедура которую я ищу, а object?


первый источник информации - help
https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-sql-referencing-entities-transact-sql
27 май 19, 22:06    [21895207]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
fkthat
Member

Откуда:
Сообщений: 3039
Если по-быстрому и на один раз, то в SSMS "View dependencies".
28 май 19, 00:21    [21895276]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
L_argo
Member

Откуда:
Сообщений: 1217
SELECT * FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID(@SqlObjName)
Ключевые поля referencing_id и referenced_id

Можно получить все зависимости в обе стороны.
28 май 19, 09:50    [21895396]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
msLex
Member

Откуда:
Сообщений: 8091
L_argo
SELECT * FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID(@SqlObjName)

Ключевые поля referencing_id и referenced_id

Можно получить все зависимости в обе стороны.


referenced_id не будет заполнено, если используемый объект отсутствовал на момент создания/последнего sp_refresh... referencing объекта

поэтому надежнее использовать referenced_schema_name + referenced_entity_name
28 май 19, 12:33    [21895576]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
dermama
Member

Откуда:
Сообщений: 226
L_argo
SELECT * FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID(@SqlObjName)
Ключевые поля referencing_id и referenced_id

Можно получить все зависимости в обе стороны.


спасибо, дорогой, мне ваш запрос походу функцию запустил. еще и письмецо на почту со сверкой отправил, потрясающе, а я то думаю что он так долго (10 мин) работает, видимо подробную информацию выдаст........
3 июн 19, 22:56    [21900993]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
Penner
Member

Откуда:
Сообщений: 334
https://www.devart.com/dbforge/sql/search/
4 июн 19, 08:18    [21901129]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
TheRookie
Member

Откуда:
Сообщений: 27
dermama, для случая, когда процедуры располагаются в разных базах

Use another_db
GO
SELECT [name]
FROM sys.objects
WHERE [type] IN ('P') 
AND OBJECT_DEFINITION([object_id]) LIKE '%my_proc%';
4 июн 19, 16:36    [21901695]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
msLex
Member

Откуда:
Сообщений: 8091
TheRookie
dermama, для случая, когда процедуры располагаются в разных базах

Use another_db
GO
SELECT [name]
FROM sys.objects
WHERE [type] IN ('P') 
AND OBJECT_DEFINITION([object_id]) LIKE '%my_proc%';



для случая, когда процедуры располагаются в разных базах/серверах, в sys.sql_expression_dependencies есть referenced_server_name и referenced_database_name
4 июн 19, 16:38    [21901698]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33683
Блог
эти конструкции динамику не ловят,
если она используется, то лучше по тексту кода искать
4 июн 19, 16:45    [21901705]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
dermama
Member

Откуда:
Сообщений: 226
Критик
эти конструкции динамику не ловят,
если она используется, то лучше по тексту кода искать


То есть вот этот запрос мне ничего не запустит?? Хорошо, что процедура просто подгружала информацию ни на что не влияющую, а если бы там UPDATE был бы?

Use another_db
GO
SELECT [name]
FROM sys.objects
WHERE [type] IN ('P')
AND OBJECT_DEFINITION([object_id]) LIKE '%my_proc%';
4 июн 19, 22:14    [21901980]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
dermama
Member

Откуда:
Сообщений: 226
Критик
эти конструкции динамику не ловят,
если она используется, то лучше по тексту кода искать


Расскажите, пожалуйста, как SELECT мог мне запустить исполнение процедуры? Я пробовал искать зависимости по другим процедурам и подобного не было - была лишь выборка в виде таблицы, а тут, пока я покурить сходил - отчет о том, процедура отработала успешно, да еще отчетик на всю группу выслала.
4 июн 19, 22:16    [21901981]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
dermama
Критик
эти конструкции динамику не ловят,
если она используется, то лучше по тексту кода искать


Расскажите, пожалуйста, как SELECT мог мне запустить исполнение процедуры? Я пробовал искать зависимости по другим процедурам и подобного не было - была лишь выборка в виде таблицы, а тут, пока я покурить сходил - отчет о том, процедура отработала успешно, да еще отчетик на всю группу выслала.

никак, это ваша фантазия
5 июн 19, 09:06    [21902111]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
dermama
Member

Откуда:
Сообщений: 226
TaPaK
dermama
пропущено...


Расскажите, пожалуйста, как SELECT мог мне запустить исполнение процедуры? Я пробовал искать зависимости по другим процедурам и подобного не было - была лишь выборка в виде таблицы, а тут, пока я покурить сходил - отчет о том, процедура отработала успешно, да еще отчетик на всю группу выслала.

никак, это ваша фантазия


скриншот не могу показывать, однако, стало бы ясно, что фантазии мои настолько же не верны, как верно ваше утверждение.
5 июн 19, 09:23    [21902129]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
dermama
TaPaK
пропущено...

никак, это ваша фантазия


скриншот не могу показывать, однако, стало бы ясно, что фантазии мои настолько же не верны, как верно ваше утверждение.

ладно, это ваша больная фантазия, не внимательность и тд и тп

my_proc
go
SELECT

тоже построит ва отчётик
5 июн 19, 09:27    [21902137]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31366
dermama
скриншот не могу показывать, однако, стало бы ясно, что фантазии мои настолько же не верны, как верно ваше утверждение.
Скриншот вряд ли может показать, что ничего, кроме вышеупомянутого запроса, на сервере не запускалось.

Конечно, внутренности sys.sql_expression_dependencies скрыты, но что бы он что то запускал, очень маловероятно.
В плане там обычные Clustered Index Scan/Seek из таблиц, никаких вызовов кода нет, кроме типичных проверок прав, определения имени текущей базы и тому подобного.
5 июн 19, 10:14    [21902200]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
alexeyvg,

CREATE VIEW sys.sql_expression_dependencies AS
	SELECT referencing_id, referencing_minor_id, referencing_class, referencing_class_desc,
			is_schema_bound_reference, referenced_class, referenced_class_desc,
			referenced_server_name, referenced_database_name, referenced_schema_name, referenced_entity_name,
			referenced_id, referenced_minor_id, is_caller_dependent, is_ambiguous
	FROM sys.sql_expression_dependencies$
	WHERE has_perms_by_name(quotename(db_name()), 'DATABASE', 'VIEW DEFINITION') = 1


что там в системном объекте уже хз, но вызов это фантастика
5 июн 19, 10:26    [21902213]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31366
TaPaK
что там в системном объекте уже хз
Да, я и говорю, скрыто. Но план показывает все обращения (блин, и зачем скрывали?)
Не, можно, конечно, посмотреть в присоединённых ресурсах (опять же, и зачем скрывали?), но неохота.
5 июн 19, 10:38    [21902219]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
dermama
Member

Откуда:
Сообщений: 226
TaPaK
alexeyvg,

CREATE VIEW sys.sql_expression_dependencies AS
	SELECT referencing_id, referencing_minor_id, referencing_class, referencing_class_desc,
			is_schema_bound_reference, referenced_class, referenced_class_desc,
			referenced_server_name, referenced_database_name, referenced_schema_name, referenced_entity_name,
			referenced_id, referenced_minor_id, is_caller_dependent, is_ambiguous
	FROM sys.sql_expression_dependencies$
	WHERE has_perms_by_name(quotename(db_name()), 'DATABASE', 'VIEW DEFINITION') = 1


что там в системном объекте уже хз, но вызов это фантастика


Я новичек в SQL, но отличить выборку и запуск процедуры я в состоянии. Я запустил запрос

DECLARE @SqlObjName varchar (100)
SET @SqlObjName = '[схема].[имя_моей_процедуры]'

SELECT *
FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID(@SqlObjName)


запрос начала выполняться, прошло секунд 30, думаю, ну ладно, пойду покурю, может много зависимостей - процедура большая.
Пришел с перекура, через 10 минут: Как результат в диалоговом окне, где обычно появляется выборка запроса - Messages
(1 row affected)
2019-06-03 22:20:40.100: название_моей процедуры: Running: Старт процедуры база.схема.название процедуры
2019-06-03 22:20:40.223: --тут запустил входящую процедуру в состав предыдущей
всего 10 пунктов.
.
.
.
.
.
.
.
.
2019-06-03 22:31:11.763: название_моей процедуры: END: Успешное завершение процедуры название_моей _процедуры.
(смотрю скриншот)

Товарищи, я ни в коем случае не сомневаюсь в вашей компетенции, однако есть вероятность того, что вы о таком могли просто не знать?
5 июн 19, 12:37    [21902408]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
dermama,

--1.
CREATE OR ALTER PROCEDURE dbo.Bullshit
As
	SELECT 'I AM bullshit'
GO


DECLARE @SqlObjName varchar (100)
SET @SqlObjName = '[dbo].[Bullshit]'

SELECT *
FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID(@SqlObjName)

GO
--2
dbo.Bullshit


первую половину я могу запускать целый день и наверное серевр таки решит что я хочу что то выполнить.
А у вас где то написано ака 2 пункт
5 июн 19, 12:42    [21902417]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
uaggster
Member

Откуда:
Сообщений: 827
Всё это не учитывает злобных злонамеренных извращенцев.
А таковые, к сожалению, встречаются.

Например, перечень запускаемых хранимых процедур может хранится в таблице, читаться оттуда и запускаться через exec или sp_executesql.

Или, например, как вам такое:
Declare @sql as varchar(max)

Select @sql = Cast (0x50726F635F3031 as varchar(max))
Exec (@sql)

Почти, млять, реальный кусок из реальной программы, но в реальности всё еще жопнее!
Там формируется кусок текста для динамического sql, причем в нем могут запускаться хранимки вида proc_tools, proc_prepare, proc_exec, причем эти 'prepare' и т.д. формируются через replace, по статически заданному куску, а 'proc', значит, замаскированы, см. выше, чтобы этим самым реплейсом случайно не ловились.

И вот скажите мне, друзья, какими словами можно выразить благодарность разработчику?

... И это еще не учтен вариант формирование самих sp динамически...

Можно, я не буду продолжать?
5 июн 19, 13:33    [21902489]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
L_argo
Member

Откуда:
Сообщений: 1217
И вот скажите мне, друзья, какими словами можно выразить благодарность разработчику?
Он реально преуспел в обфускации.
Видимо жадный заказчик его напарил, но он в долгу не остался.
Теперь заказчик вдвойне платит другому разработчику и доводит его до белого каления.
5 июн 19, 14:21    [21902545]     Ответить | Цитировать Сообщить модератору
 Re: Поиск процедуры  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
uaggster
Или, например, как вам такое:
Скобки у EXEC - лишние.
5 июн 19, 14:28    [21902556]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить