在MS SQL 2005中,是否可以找出哪些表/列作为另一个表中的键或作为存储过程的一部分使用?
原因是我正在尝试清理一些旧的存储过程和表,其中一些可以删除,其中一些可以修剪列。但显然我不想删除正在使用的东西。
答案 0 :(得分:1)
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
答案 1 :(得分:1)
在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');
另一种选择是使用Red Gate中名为SQL Dependency Tracker的非常有用的工具。