📜  sql server:查询找出所有使用表的地方 - SQL (1)

📅  最后修改于: 2023-12-03 15:05:17.983000             🧑  作者: Mango

SQL Server 查询找出所有使用表的地方

在 SQL Server 中,我们可以使用以下 SQL 查询语句来查找所有使用表的地方:

SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc,
       referencing_database_name, referencing_schema_id, referencing_type_desc, referenced_schema_name,
       referenced_entity_name, referenced_id, referenced_class_desc, referenced_schema_id,
       referenced_type_desc
FROM sys.dm_sql_referencing_entities ('dbo.TableName', 'OBJECT');

以上查询语句使用了 sys.dm_sql_referencing_entities 系统函数,该函数用于检查引用某个对象的所有对象。

  • referencing_schema_name: 引用对象的架构名称
  • referencing_entity_name: 引用对象的名称
  • referencing_id: 引用对象的 ID
  • referencing_class_desc: 引用对象的类别描述
  • referencing_database_name: 引用对象所在的数据库名称
  • referencing_schema_id: 引用对象的架构 ID
  • referencing_type_desc: 引用对象的类型描述
  • referenced_schema_name: 被引用对象的架构名称
  • referenced_entity_name: 被引用对象的名称
  • referenced_id: 被引用对象的 ID
  • referenced_class_desc: 被引用对象的类别描述
  • referenced_schema_id: 被引用对象的架构 ID
  • referenced_type_desc: 被引用对象的类型描述

以上查询结果会返回所有使用表 dbo.TableName 的对象列表。

如果你想要查询所有数据库中使用一个表的地方,可以使用以下 SQL 查询语句:

SELECT referencing_database_name, referencing_schema_name, referencing_entity_name, referenced_database_name,
       referenced_schema_name, referenced_entity_name
FROM sys.dm_sql_referencing_entities('dbo.TableName', 'OBJECT')
WHERE referencing_database_name != referenced_database_name;

以上查询语句将过滤掉那些在同一个数据库中引用该表的对象,仅返回在不同数据库中引用该表的对象。