sql server系统表详细说明 之 sys.sql_expression_dependencies


当前数据库中用户定义实体的每个按名称依赖项在此表中均占一行。 这包括本机编译标量用户定义函数和其他模块之间的依赖项 SQL Server 。 两个实体之间的依赖关系是在另一个实体(称为 "引用实体 ")的 持久化 SQL 表达式中按名称显示的。 例如,在视图定义中引用表时,作为引用实体的视图将依赖于表这个被引用的实体。 如果删除该表,则该视图不可用。

有关详细信息,请参阅内存中 OLTP 的标量用户定义函数

您可以使用此目录视图来报告以下实体的依赖关系信息:

  • 绑定到架构的实体。

  • 非绑定到架构的实体。

  • 跨数据库和跨服务器的实体。 报告了实体名称;但实体 ID 尚未解析。

  • 绑定到架构的实体的列级依赖关系。 使用 sys.dm_sql_referenced_entities可以返回非绑定到架构的对象的列级依赖关系。

  • 服务器级别的 DDL 触发器(在 master 数据库的上下文中时)。

表 1
列名称数据类型说明
referencing_idint引用实体的 ID。 不可为 null。
referencing_minor_idint引用实体为列时的列 ID;否则为 0。 不可为 null。
referencing_classtinyint引用实体的类。

1 = 对象或列

12 = 数据库 DDL 触发器

13 = 服务器 DDL 触发器

不可为 null。
referencing_class_descnvarchar(60)对引用实体的类的说明。

OBJECT_OR_COLUMN

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER

不可为 null。
is_schema_bound_referencebit1 = 被引用的实体绑定到架构。

0 = 被引用的实体未绑定到架构。

不可为 null。
referenced_classtinyint被引用的实体的类。

1 = 对象或列

6 = 类型

10 = XML 架构集合

21 = 分区函数

不可为 null。
referenced_class_descnvarchar(60)对被引用的实体的类的说明。

OBJECT_OR_COLUMN

TYPE

XML_SCHEMA_COLLECTION

PARTITION_FUNCTION

不可为 null。
referenced_server_namesysname被引用的实体的服务器的名称。

此列是为通过指定由四个部分组成的有效名称所生成的跨服务器依赖关系填充的。 有关多部分名称的信息,请参阅 Transact-sql 语法约定 (transact-sql)

对于非绑定到架构的实体,如果实体被引用时没有指定由四个部分组成的名称,此列为 NULL。

对于绑定到架构的实体,此值为 NULL,因为它们必须在同一数据库中,因此只能使用由两部分组成 (schema) 名称进行定义。
referenced_database_namesysname被引用的实体的数据库的名称。

此列是为通过指定由三个部分或四个部分组成的有效名称生成的跨数据库或跨服务器引用填充的。

对于非绑定到架构的引用,当使用由一个部分或两个部分组成的名称指定时,此列为 NULL。

对于绑定到架构的实体,此值为 NULL,因为它们必须在同一数据库中,因此只能使用由两部分组成 (schema) 名称进行定义。
referenced_schema_namesysname被引用的实体所属的架构。

对于非绑定到架构的引用,如果实体被引用时没有指定架构名称,此列为 NULL。

对于绑定到架构的引用,此列永不为 NULL,原因在于必须使用由两部分组成的名称来定义和引用绑定到架构的实体。
referenced_entity_namesysname被引用的实体的名称。 不可为 null。
referenced_idint被引用的实体的 ID。 对于绑定到架构的引用,此列的值始终为 NULL。 对于跨服务器和跨数据库引用,此列的值始终为 NULL。

对于数据库内的引用,如果无法确定 ID,则为 NULL。 对于非绑定到架构的引用,在以下情况下将无法解析 ID:

被引用实体不存在于数据库中。

被引用的实体的架构依赖于调用方的架构,并在运行时解析。 在这种情况下,is_caller_dependent 设置为 1。
referenced_minor_idint引用实体为列时被引用的列的 ID;否则为 0。 不可为 null。

当列在引用实体中按名称标识时,或者当 SELECT * 语句中使用了父实体时,被引用的实体为列。
is_caller_dependentbit指示被引用的实体的架构绑定在运行时发生,因此,实体 ID 的解析依赖于调用方的架构。 当被引用的实体为存储过程、扩展存储过程或在 EXECUTE 语句中调用的非绑定到架构的用户定义函数时,将会出现这种情况。

1 = 被引用的实体依赖于调用方并在运行时解析。 在这种情况下,referenced_id 为 NULL。

0 = 被引用的实体 ID 不依赖调用方。

对于绑定到架构的引用、显式指定架构名称的跨数据库和跨服务器的引用,始终为 0。 例如,对格式为 EXEC MyDatabase.MySchema.MyProc 的实体的引用不依赖于调用方。 但是,格式为 EXEC MyDatabase..MyProc 的引用依赖调用方。
is_ambiguousbit指示引用不明确,可在运行时解析为用户定义函数、用户定义类型 (UDT) 或对 xml 类型的列的 xquery 引用。

例如,假定语句 SELECT Sales.GetOrder() FROM Sales.MySales 是在存储过程中定义的。 在执行存储过程之前,并不知道 Sales.GetOrder() 是 Sales 架构中的用户定义函数还是带有名为 Sales 的方法、类型为 UDT 且名为 GetOrder() 的列。

1 = 引用不明确。

0 = 引用是明确的,或者在调用视图时可以成功绑定实体。

对于架构绑定引用,始终为0。

备注

下表列出了为其创建和维护依赖关系信息的实体类型。 不为规则、默认值、临时表、临时存储过程或系统对象创建或维护依赖关系信息。

 备注

Azure Synapse Analytics 和并行数据仓库支持表、视图、筛选统计信息和 Transact-sql 存储过程的实体类型。 只为表、视图和筛选统计信息创建并维护依赖关系信息。

 

备注
实体类型引用实体被引用的实体
是*
查看
筛选索引是**
筛选统计信息是**
Transact-SQL 存储过程***
CLR 存储过程
Transact-SQL 用户定义函数
CLR 用户定义函数
CLR 触发器(DML 和 DDL)
Transact-SQL DML 触发器
Transact-SQL 数据库级 DDL 触发器
Transact-SQL 服务器级 DDL 触发器
扩展的存储过程
队列
同义词
类型(别名和 CLR 用户定义类型)
XML 架构集合
分区函数

* 仅当表引用 Transact-SQL 计算列、CHECK 约束或 DEFAULT 约束的定义中的模块、用户定义类型或 XML 架构集合时,才会将该表作为引用实体进行跟踪。

** 筛选谓词中使用的每列都作为引用实体进行跟踪。

*** 整数值大于 1 的带编号的存储过程将不会作为引用实体或被引用的实体进行跟踪。

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YES开发框架
评论列表

发表评论

评论内容
昵称:
关联文章

sql server系统详细说明 sys.sql_expression_dependencies
sql server系统详细说明 sys.sql_dependencies
sql server系统详细说明 sys.all_columns
sql server系统详细说明 sys.masked_columns
sql server系统详细说明 sys.system_objects
sql server系统详细说明 sys.system_views
sql server系统详细说明 sys.columns
sql server系统详细说明 sys.objects
sql server系统详细说明 sys.system_columns
sql server系统详细说明 sys.sql_modules
sql server系统详细说明 sys.tables
sql server系统详细说明 sys.views
sql server系统详细说明 sys.all_views
sql server系统详细说明 sys.stats
sql server系统详细说明 sys.all_objects
sql server系统详细说明 sys.parameters
sql server系统详细说明 sys.system_parameters
sql server系统详细说明 sys.default_constraints
sql server系统详细说明 sys.table_types
sql server系统详细说明 sys.databases