我需要找到不仅使用某个表,而且使用表中特定列的所有视图和存储过程。
以下“似乎”有效,但有许多警告要小心使用此方法(由于各种原因不可靠,很快将被弃用等):
SELECT object_name(so.id) TableName, sc.name ColumnName, OBJECT_NAME(sd.id) DependentObjectName,
(SELECT xtype FROM sysobjects so WHERE so.id = sd.id) Object_Type
FROM sysobjects so INNER JOIN syscolumns sc
ON so.id = sc.id
INNER JOIN sysdepends sd
ON so.id = sd.depid and sc.colid = sd.depnumber
WHERE
object_name(so.id) = 'MyTableName'
AND sc.name = 'MyColumnName'
order by object_name(so.id), Object_Type
Run Code Online (Sandbox Code Playgroud)
一些经常被引用的替代方法是 sys.sql_dependencies 和 sys.sql_expression_dependencies,但它们都没有列级粒度。
有谁知道这样做的方法?(或者,即使您明确知道它实际上无法完成,知道它也会有所帮助。)
Gle*_*wan 13
这是一个关于查看列依赖关系的 AdventureWorks 示例。
SELECT ReferencingObject = SCHEMA_NAME(o1.schema_id) + '.' + o1.name,
ReferencedObject = SCHEMA_NAME(o2.schema_id) + '.'
+ ed.referenced_entity_name,
ColumnName = c.name,
ReferencedObjectType = o2.type,
ReferencingObjecType = o1.type
FROM AdventureWorks2012.sys.sql_expression_dependencies ed
INNER JOIN AdventureWorks2012.sys.objects o1
ON ed.referencing_id = o1.object_id
INNER JOIN AdventureWorks2012.sys.objects o2
ON ed.referenced_id = o2.object_id
INNER JOIN AdventureWorks2012.sys.sql_dependencies d
ON ed.referencing_id = d.object_id
AND d.referenced_major_id = ed.referenced_id
INNER JOIN sys.columns c
ON c.object_id = ed.referenced_id
AND d.referenced_minor_id = c.column_id
WHERE SCHEMA_NAME(o1.schema_id) + '.' + o1.name = 'HumanResources.vEmployee' AND c.name = 'JobTitle'
ORDER BY ReferencedObject,
c.column_id;
Run Code Online (Sandbox Code Playgroud)