Написать запрос, который возвращает зависимости объекта - PullRequest
3 голосов
/ 16 декабря 2009

Я ищу именно то, что Management Studio показывает в меню «Просмотр зависимостей».

  1. Management Studio подключено к SQL Server 2008
  2. Щелкните правой кнопкой мыши объект и выберите «Просмотр зависимостей»
  3. Теперь вы можете перемещаться по зависимостям назад и вперед.

Как получить ту же информацию программно? (SQL-запрос?)

Ответы [ 5 ]

4 голосов
/ 16 декабря 2009
Before you run the following query, replace <database_name> and <schema_name.function_name> with valid names

USE <database_name>;
GO
SELECT OBJECT_NAME(object_id) AS referencing_object_name
    ,COALESCE(COL_NAME(object_id, column_id), '(n/a)') AS referencing_column_name
    ,*
FROM sys.sql_dependencies
WHERE referenced_major_id = OBJECT_ID('<schema_name.function_name>')
ORDER BY OBJECT_NAME(object_id), COL_NAME(object_id, column_id);
GO
3 голосов
/ 16 декабря 2009

Вот еще один более простой способ:

  SELECT DISTINCT
    O.ID ,
    O.Name AS TableName ,
    O.xtype
  FROM
    sysObjects O ( NOLOCK )
  INNER JOIN sysComments C ( NOLOCK ) ON O.ID = C.ID
  WHERE
    C.text LIKE '%<schema_name.function_name>%'
  ORDER BY
    XType ,
    TableName
Before you run the following query, replace <schema_name.function_name> with a valid name
2 голосов
/ 18 апреля 2013

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

Вместо использования устаревшего sys.sql_dependencies можно использовать табличную функцию sys.dm_sql_referencing_entities.

Следующий запрос вызывает его рекурсивно для отслеживания зависимостей, показывая каждый шаг в цепочке зависимостей:

DECLARE @table varchar(max);
SET @table = 'schema.objectname';
;with 
DepsOn As (
    SELECT CAST(@table As varchar(max)) As parent
         , CAST(l1.referencing_schema_name 
               + '.' 
               + l1.referencing_entity_name As varchar(max)) As child
         , l1.referencing_class_desc As [description]
         , 0 As Depth
    FROM sys.dm_sql_referencing_entities(@table,'OBJECT') l1
    UNION ALL
    SELECT l2.child As parent
         , cast(l2ca.referencing_schema_name 
               + '.' 
               + l2ca.referencing_entity_name As varchar(max)) As child
         , l2ca.referencing_class_desc As [description]
         , l2.Depth + 1 As Depth
    FROM DepsOn l2
    CROSS APPLY sys.dm_sql_referencing_entities(l2.child,'OBJECT') l2ca
    )
SELECT *
FROM DepsOn
1 голос
/ 16 декабря 2009

Посмотрите на метаданные в таблицах sys и INFORMATION_SCHEMA.

Существует этот ответ , этот ответ и этот ответ , что может быть полезно.

0 голосов
/ 17 июля 2015

проверенный код. Я запускаю его и выхожу на нужный мне вывод

 SELECT referencing_schema_name, referencing_entity_name,
     referencing_id, referencing_class_desc, is_caller_dependent
     FROM sys.dm_sql_referencing_entities ('dbo.yourobject', 'OBJECT');
     GO

VishalDream

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