Зависимости SQL Server - PullRequest
       46

Зависимости SQL Server

11 голосов
/ 18 ноября 2008

Есть ли простой способ отследить зависимости таблиц / хранимых процедур / функций в SQL Server 2005+? Я унаследовал гигантское приложение с множеством таблиц и еще большим количеством хранимых процедур и функций, которые являются длинными и взаимосвязанными.

В конце концов, есть ли способ построить дерево зависимостей? В идеале то, что я ищу, идет в обоих направлениях:

Для таблицы / процедуры - что зависит от нее? : Показать все хранимые процедуры, которые в конечном итоге ссылаются на нее (в идеале в виде дерева, чтобы подпроцедуры вкладывались в более крупные процедуры, которые их вызывают )

Для процедуры - от чего зависит ИТ? : Покажите мне все процедуры и таблицы, к которым данная процедура (или может) прикоснуться при работе.

Кажется, что этот инструмент не должен быть таким сложным, и он был бы невероятно полезен для обслуживания БД в целом. Кто-нибудь знает о такой вещи? Если этого не существует, почему, черт возьми, нет?

Встроенная функциональность в Management Studio хороша, но информация, похоже, не полная.

Ответы [ 8 ]

26 голосов
/ 11 февраля 2009

Надеюсь, я еще не опоздал с этим:

Если ваш логин SQL имеет доступ к схеме sys в конкретной базе данных, вы можете использовать представление sys.dependencies, чтобы найти все зависимости объекта за один раз:

SELECT o.name, o.type_desc, p.name, p.type_desc
FROM sys.sql_dependencies d
INNER JOIN sys.objects o
    ON d.object_id = o.object_id
INNER JOIN sys.objects p
    ON d.referenced_major_id = p.object_id

Используя это в качестве отправной точки, вы, вероятно, могли бы создать достойный инструмент для создания дерева зависимостей. Существуют также виды, специфичные для типа (например, sys.columns), которые дают более подробную информацию о каждом конкретном типе объекта базы данных; при необходимости они могут использоваться для предоставления контекстной информации об объекте.

12 голосов
/ 18 ноября 2008

Red Gate имеет довольно полезный инструмент под названием Отслеживание зависимостей SQL . Мы успешно использовали его для того типа результатов, который вы хотите получить.

2 голосов
/ 18 ноября 2008

Вот список вариантов, если у вас ограниченный бюджет:

http://www.mssqltips.com/tip.asp?tip=1294

Вы также можете запустить трассировку и посмотреть, что на самом деле делает студия управления, нажав «Просмотреть зависимости». Возьмите этот код и посмотрите, сможете ли вы изменить его для собственного использования. Это хорошая техника для выяснения того, как автоматизировать различные вещи, которые вы обычно делаете через пользовательский интерфейс.

2 голосов
/ 18 ноября 2008

Я не думаю, что это список с полной гарантией, но в Management Studio вы можете щелкнуть правой кнопкой мыши таблицу или хранимую процедуру и выбрать параметр View Dependencies.

1 голос
/ 30 сентября 2015

Я нашел это решение и его замечательно.

SELECT referencing_schema_name, referencing_entity_name,
referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('dbo.udf_func', 'OBJECT');
0 голосов
/ 26 ноября 2015

С MSDN :

SELECT * FROM sys.sql_expression_dependencies
WHERE referenced_id = OBJECT_ID(N'Production.Product');

Мы можем сделать это более изумительным:

select
I.name depending, I.xtype dependingtype,
E.name depended, E.xtype dependedtype
from sys.sql_expression_dependencies D
left outer join sysobjects I on D.referencing_id = I.id
left outer join sysobjects E on D.referenced_id = E.id
where 1 = 1
and ( E.name = 'mytable' or I.name = 'mytable' )  -- customize this any way you want
order by dependedtype, depended, dependingtype, depending
0 голосов
/ 14 августа 2013

попробуйте этот инструмент повышения производительности http://sqlhopper.weebly.com/ Это круто

0 голосов
/ 18 ноября 2008

Системная таблица, которая пытается отслеживать зависимости, как правило, неверна, поэтому любой ответ, который вы получите от этого, вам придется повторно подтверждать другими способами, так зачем беспокоиться об этом?

Существуют коммерческие продукты, такие как Redgate SQL Dependency Tracker.

Бедный разработчик, как и я, я использую SQL Digger, который бесплатный. Выполняя поиск по имени объекта в DDL, вы обычно можете найти зависимости первой степени для рассматриваемого объекта.

Следующим уровнем отслеживания зависимостей является отслеживание того, какие сетевые объекты C # или VB.NET зависят от объекта в SQL, но, AFAIK, инструменты для этого не существуют вне глобального поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...