sys.sql_dependencies (Transact-SQL)

更新日期: 2006 年 12 月 12 日

在定义某些其他引用(相关)对象的 SQL 表达式或语句中进行引用时,被引用(独立)实体的每个相关性在表中均对应一行。sys.sql_dependencies 视图用于跟踪实体之间的名称相关性。对于 sys.sql_dependencies 中的每行,被引用实体都按名称在引用对象的持久化 SQL 表达式中显示。此外,如果引用对象具有与架构绑定的表达式,则将强制实现相关性。有关详细信息,请参阅了解 SQL 依赖关系

列名 数据类型 说明

class

tinyint

标识所引用(独立)实体的类:

0 = 对象或列(仅非架构绑定引用)

1 = 对象或列(架构绑定引用)

2 = 类型(架构绑定引用)

3 = XML 架构集合(架构绑定引用)

4 = 分区函数(架构绑定引用)

class_desc

nvarchar(60)

对于被引用(独立)实体的类的说明:

  • OBJECT_OR_COLUMN_REFERENCE_NON_SCHEMA_BOUND
  • OBJECT_OR_COLUMN_REFERENCE_SCHEMA_BOUND
  • TYPE_REFERENCE
  • XML_SCHEMA_COLLECTION_REFERENCE
  • PARTITION_FUNCTION_REFERENCE

object_id

int

引用(相关)对象的 ID。

column_id

int

如果相关 ID 是一个列,则为引用(相关)列的 ID;否则为 0。

referenced_major_id

int

被引用(独立)实体的 ID,按照下列方式由类的值解释:

0、1 = 对象或列的对象 ID。

2 = 类型 ID。

3 = XML 架构集合 ID。

referenced_minor_id

int

被引用(独立)实体的 Minor-ID,按照下列方式由类的值解释。

当 class =:

0, referenced_minor_id 为列 ID;如果不是列,则为 0。

1, referenced_minor_id 为列 ID;如果不是列,则为 0。

否则,referenced_minor_id = 0。

is_selected

bit

选中了对象或列。

is_updated

bit

更新了对象或列。

is_select_all

bit

对象用于 SELECT * 语句(仅对象级)。

备注

仅当创建引用(相关)对象时存在被引用(独立)的实体,才会在 CREATE 过程中建立相关性。由于名称解析有延迟,因此创建时被引用的实体无需存在。在这种情况下,不创建相关性行。此外,通过动态 SQL 引用的实体也不建立相关性。

如果使用 DROP 删除被引用(独立)实体,则自动删除相关性行。若要重新建立相关性行,则需要使用 CREATE 按照正确的相关性顺序重新创建二者的兼容性。

对于对象,将同时跟踪架构绑定相关性和非架构绑定相关性。CHECK 约束、默认值和计算列引用都为隐式架构绑定。仅对于架构绑定相关性,才跟踪与类型、XML 架构集合以及分区函数的相关性。在 SQL Server 2005 Service Pack 1 及更低版本中,定义在 Transact-SQL 函数或 过程中的参数属于隐式架构绑定。因此,可以使用 sys.sql_dependencies 目录视图查看依赖于 CLR 用户定义类型别名XML 架构集合的参数。然而,这表示无法重命名这些对象。在 SQL Server 2005 Service Pack 2 中, 仅当 Transact-SQL 模块是通过架构绑定创建时才在目录视图中跟踪依赖于这些对象的参数。在非架构绑定的模块中用作参数的 CLR 用户定义类型、别名或 XML 架构集合都可以重命名,但最好使用 sp_refreshsqlmodule 刷新模块定义。

示例

A. 查找指定函数的依赖项

以下示例返回指定函数的依赖项。运行以下查询之前,请使用有效名称替换 <database_name><schema_name.function_name>

USE <database_name>;
GO
SELECT OBJECT_NAME(object_id) AS referencing_object_name
    ,COALESCE(COL_NAME(object_id, column_id), '(n/a)') AS referencing_column_name
    ,*
FROM sys.sql_dependencies
WHERE referenced_major_id = OBJECT_ID('<schema_name.function_name>')
ORDER BY OBJECT_NAME(object_id), COL_NAME(object_id, column_id);
GO 

B. 查找依赖于指定 CLR 用户定义类型的 CHECK 约束

运行以下查询之前,请使用有效名称替换 <database_name>,并使用有效架构限定 CLR 用户定义类型名称替换 <schema_name.data_type_name>

USE <database_name>;
GO
SELECT SCHEMA_NAME(o.schema_id) AS schema_name
    ,OBJECT_NAME(o.parent_object_id) AS table_name
    ,OBJECT_NAME(o.object_id) AS constraint_name
FROM sys.sql_dependencies AS d
JOIN sys.objects AS o ON o.object_id = d.object_id
WHERE referenced_major_id = TYPE_ID('<schema_name.data_type_name>')
    AND class = 2 -- schema-bound references to type
    AND OBJECTPROPERTY(o.object_id, 'IsCheckCnst') = 1; -- exclude non-CHECK dependencies
GO

C. 查找依赖于指定 CLR 用户定义类型或别名类型的视图、Transact-SQL 函数和 Transact-SQL 存储过程

以下查询返回指定 CLR 用户定义类型或别名类型在视图、Transact-SQL 函数和 Transact-SQL 存储过程中的所有架构绑定依赖关系。

USE <database_name>;
GO
SELECT SCHEMA_NAME(o.schema_id) AS dependent_object_schema
  ,OBJECT_NAME(o.object_id) AS dependent_object_name
  ,o.type_desc AS dependent_object_type
  ,d.class_desc AS kind_of_dependency
  ,TYPE_NAME (d.referenced_major_id) AS type_name
FROM sys.sql_dependencies AS d 
JOIN sys.objects AS o
  ON d.object_id = o.object_id
  AND o.type IN ('FN','IF','TF', 'V', 'P')
WHERE d.class = 2 -- dependencies on types
  AND d.referenced_major_id = TYPE_ID('<schema_name.data_type_name>')
ORDER BY dependent_object_schema, dependent_object_name;
GO

请参阅

参考

目录视图 (Transact-SQL)
对象目录视图 (Transact-SQL)
sp_rename (Transact-SQL)
sp_refreshsqlmodule (Transact-SQL)

其他资源

实现用户定义类型
了解 SQL 依赖关系
查询 SQL Server 系统目录常见问题
管理服务器上的 XML 架构集合

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 12 月 12 日

新增内容:
  • 添加了有关将用户定义类型、别名和 XML 架构集合用作 Transact-SQL 模块参数时这些对象的依赖关系的信息。
  • 添加了“示例”部分。