我有一个数据库,其中包含表,过程,视图和触发器的列表.但我想要一个查询来获取一个表的所有依赖项,包括引用父表的子表.
小智 58
以下是可以检查依赖关系的方法
方法1:使用sp_depends
sp_depends 'dbo.First'
GO
Run Code Online (Sandbox Code Playgroud)
方法2:使用information_schema.routines
SELECT *
FROM information_schema.routines ISR
WHERE CHARINDEX('dbo.First', ISR.ROUTINE_DEFINITION) > 0
GO
Run Code Online (Sandbox Code Playgroud)
方法3:使用DMV sys.dm_sql_referencing_entities
SELECT referencing_schema_name, referencing_entity_name,
referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('dbo.First', 'OBJECT');
GO
Run Code Online (Sandbox Code Playgroud)
小智 10
除了其他答案中描述的方法(sp_depends系统存储过程,SQL Server动态管理功能),您还可以查看SQL Server对象之间的依赖关系 - 来自SSMS.
您可以使用SSMS中的View Dependencies选项.在" 对象资源管理器"窗格中,右键单击该对象,然后从上下文菜单中选择" 查看依赖项"选项
我自己更喜欢名为ApexSQL Search的第三方依赖查看器.它是一个免费的插件,集成到SSMS和Visual Studio中,用于SQL对象和数据文本搜索,扩展属性管理,安全对象重命名和关系可视化.
在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')
Run Code Online (Sandbox Code Playgroud)
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');
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用sp_depends:
EXEC sp_depends '<TableName>'
Run Code Online (Sandbox Code Playgroud)
另一个选择是使用一个非常有用的工具,名为Red Gate的SQL Dependency Tracker.
小智 8
查找所有外键
SELECT src.name, srcCol.name, dst.name, dstCol.name
FROM sys.foreign_key_columns fk
INNER JOIN sys.columns srcCol ON fk.parent_column_id = srcCol.[column_id]
AND fk.parent_object_id = srcCol.[object_id]
INNER JOIN sys.tables src ON src.[object_id] = fk.parent_object_id
INNER JOIN sys.tables dst ON dst.[object_id] = fk.[referenced_object_id]
INNER JOIN sys.columns dstCol ON fk.referenced_column_id = dstCol.[column_id]
AND fk.[referenced_object_id] = dstCol.[object_id]
Run Code Online (Sandbox Code Playgroud)
查询sysdepends表:
SELECT distinct schema_name(dependentObject.uid) as schema,
dependentObject.*
FROM sysdepends d
INNER JOIN sysobjects o on d.id = o.id
INNER JOIN sysobjects dependentObject on d.depid = dependentObject.id
WHERE o.name = 'TableName'
Run Code Online (Sandbox Code Playgroud)
仅查看通过名称引用对象(或任何给定文本)的视图/函数/触发器/过程的方法是:
SELECT distinct schema_name(so.uid) + '.' + so.name
FROM syscomments sc
INNER JOIN sysobjects so on sc.id = so.id
WHERE sc.text like '%Name%'
Run Code Online (Sandbox Code Playgroud)
在 SQL Server 2008 或更高版本中,我使用以下查询来查找给定表的所有依赖存储过程、用户定义函数、触发器等:
SELECT
coalesce(Referenced_server_name+'.','')+ --possible server name if cross-server
coalesce(referenced_database_name+'.','')+ --possible database name if cross-database
coalesce(referenced_schema_name+'.','')+ --likely schema name
coalesce(referenced_entity_name,'') + --very likely entity name
coalesce('.'+col_name(referenced_ID,referenced_minor_id),'')AS [referencing],
coalesce(object_schema_name(Referencing_ID)+'.','')+ --likely schema name
object_name(Referencing_ID)+ --definite entity name
coalesce('.'+col_name(referencing_ID,referencing_minor_id),'') AS [referenced]
FROM sys.sql_expression_dependencies
WHERE referenced_id =object_id('Table_name')
ORDER BY [referenced]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
105942 次 |
| 最近记录: |