Как вы находите все зависимости таблицы базы данных? - PullRequest
1 голос
/ 17 мая 2010

В MS SQL 2005 можно ли узнать, какие таблицы / столбцы используются либо как ключи в другой таблице, либо как часть хранимой процедуры?

Причина в том, что я пытаюсьочистите некоторые старые хранимые процедуры и таблицы, некоторые из которых могут быть удалены, а некоторые могут иметь обрезанные столбцы.Но, очевидно, я не хочу удалять вещи, которые используются.

Ответы [ 2 ]

1 голос
/ 25 февраля 2014

В SQL Server 2008 введены две новые функции динамического управления для отслеживания зависимостей объектов: sys.dm_sql_referenced_entities и sys.dm_sql_referencing_entities :

1 / Возвращение сущностей, которые ссылаются на данную сущность:

SELECT
        referencing_schema_name, referencing_entity_name, 
        referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('<TableName>', 'OBJECT')

2 / Возвращение сущностей, на которые ссылается объект:

SELECT
        referenced_schema_name, referenced_entity_name, referenced_minor_name, 
        referenced_class_desc, is_caller_dependent, is_ambiguous
FROM sys.dm_sql_referenced_entities ('<StoredProcedureName>', 'OBJECT');

Другой вариант - использовать довольно полезный инструмент под названием Отслеживание зависимостей SQL от Red Gate.

1 голос
/ 17 мая 2010
DECLARE @BaseObject varchar(100)
SET @BaseObject = 'AddEntry'

SET NOCOUNT ON

DECLARE @Objects TABLE (
    id int
)

INSERT @Objects (id)
SELECT id FROM sysobjects
WHERE name like @BaseObject

WHILE (@@ROWCOUNT > 0)
BEGIN
    INSERT @Objects (id)
    SELECT d.depid
    FROM sysdepends d
    WHERE d.id IN (SELECT id FROM @Objects)
    AND d.depid NOT IN (SELECT id FROM @Objects)
END

SET NOCOUNT OFF

SELECT convert(varchar(100),
        '[' + oo.name + '].[' + o.name + ']') AS '--Object--'
FROM sysobjects o 
INNER JOIN sysusers oo ON o.uid = oo.uid
WHERE o.id IN (SELECT id FROM @Objects)
ORDER BY oo.name, o.name
...