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

Откуда: Одесса
Сообщений: 86
Добрый день, комрады.
Подскажите пожалуйста, можно ли как-то получить список создаваемых/удаляемых таблиц в процедуре ?

Пример процедуры:
CREATE PROCEDURE ProcTmp AS
BEGIN

	DROP TABLE    [dbo].[Table1];
	--DROP TABLE    [dbo].[Table2]
	DROP TABLE    [dbo].[Table3];
	
	SELECT * INTO [dbo].[Table1] FROM ( SELECT 1 as field1 ) as tttt;
	SELECT * INTO [dbo].[Table3] FROM ( SELECT 1 as field1 ) as tttt;

END


В результате хочется увидать:
Table1,
Table3
27 апр 16, 15:41    [19113349]     Ответить | Цитировать Сообщить модератору
 Re: список таблиц удаляемых или создаваемых в процедуре  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
К сожалению нет. Вариант только парсить тело хранимки. Есть вариант посмотреть в зависимостях, но в них не хранятся ссылки о создании/удалении объектов. По этому поводу в свое время горевал.

Можно получить только список таблиц которые участвуют в DML операциях:

ALTER PROCEDURE ProcTmp AS
BEGIN

    DROP TABLE [dbo].[Table1]
    DROP TABLE [dbo].[Table3]

    SELECT * FROM [dbo].[Table1] --------------- !!!!
	
    SELECT * INTO [dbo].[Table1] FROM ( SELECT 1 as field1 ) as tttt;
    SELECT * INTO [dbo].[Table3] FROM ( SELECT 1 as field1 ) as tttt;

END

SELECT
      SCHEMA_NAME(o.[schema_id])
    , o.name
    , o.type_desc
    , d.referenced_database_name
    , d.referenced_schema_name
    , d.referenced_entity_name
FROM sys.sql_expression_dependencies d
JOIN sys.objects o ON d.referencing_id = o.[object_id]
WHERE d.is_ambiguous = 0
    AND d.referencing_id = OBJECT_ID('ProcTmp')
27 апр 16, 15:48    [19113390]     Ответить | Цитировать Сообщить модератору
 Re: список таблиц удаляемых или создаваемых в процедуре  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
Digit_ALL
Подскажите пожалуйста, можно ли как-то получить список создаваемых/удаляемых таблиц в процедуре ?
Можно написать триггер на DDL, записывать в отдельный лог список объектов, время и spid, и в конце процедуры вытаскивать из лога список объектов, по spid и за время между началом и концом процедуры.
27 апр 16, 17:10    [19113921]     Ответить | Цитировать Сообщить модератору
 Re: список таблиц удаляемых или создаваемых в процедуре  [new]
Digit_ALL
Member

Откуда: Одесса
Сообщений: 86
AlanDenton, спасибо. Суть понятна. Значит надо править процедуры чтобы в dependencies было видно таблицы.
alexeyvg, тоже спасибо, но такой подход не пройдет, нужно что-то типа просмотра зависимостей сразу по множеству процедур (без их запуска).
28 апр 16, 23:13    [19119821]     Ответить | Цитировать Сообщить модератору
 Re: список таблиц удаляемых или создаваемых в процедуре  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
Digit_ALL
alexeyvg, тоже спасибо, но такой подход не пройдет, нужно что-то типа просмотра зависимостей сразу по множеству процедур (без их запуска).
А, я так понял вопрос, что нужно получить фактически создаваемые/удаляемые в результате выполнения таблицы, а не анализ кода процедур...
29 апр 16, 10:18    [19120588]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить