sys.dm_db_uncontained_entities (Transact-SQL)

适用于:SQL Server

显示数据库中使用的任何非包含对象。 非包含对象是跨包含数据库中的数据库边界的对象。 此视图可同时从包含数据库和非包含数据库进行访问。 如果 sys.dm_db_uncontained_entities 为空,则您的数据库不使用任何非包含实体。

如果某个模块多次跨越数据库边界,则只报告发现的第一个跨越。

列名 类型 说明
class int 1 = 对象或列(包括模块、XP、视图、同义词和表)。

4 = 数据库主体

5 = 程序集

6 = 类型

7 = 索引(全文索引)

12 = 数据库 DDL 触发器

19 = 路由

30 = 审核规范
class_desc nvarchar(120) 对实体的类的说明。 要匹配 类的下列方法之一:

OBJECT_OR_COLUMN

DATABASE_PRINCIPAL

装配

TYPE

INDEX

DATABASE_DDL_TRIGGER

路线

AUDIT_SPECIFICATION
major_id int 实体的 ID。

如果 = 1,则object_id

如果 = 4,则sys.database_principals.principal_id。

如果 class = 5,则sys.assemblies.assembly_id。

如果 class = 6,则sys.types.user_type_id。

如果 class = 7,则sys.indexes.index_id。

如果 class = 12,则sys.triggers.object_id。

如果 class = 19,则sys.routes.route_id。

如果 class = 30,则为 sys。 database_audit_specifications.database_specification_id。
statement_line_number int 如果此类是一个模块,则返回找到非包含使用所在的行号。 否则,值为 Null。
statement_ offset_begin int 如果此类是一个模块,则指示非包含使用开始的起始位置(以字节表示,从 0 开始)。 否则,返回值为 Null。
statement_ offset_end int 如果此类是一个模块,则指示非包含使用的结束位置(以字节表示,从 0 开始)。 值为 -1 指示模块的结尾。 否则,返回值为 Null。
statement_type nvarchar(512) 语句的类型。
feature_名称 nvarchar(256) 返回对象的外部名称。
feature_type_name nvarchar(256) 返回功能的类型。

备注

sys.dm_db_uncontained_entities显示可能跨越数据库边界的实体。 它将返回可能使用数据库之外的对象的任何用户实体。

将报告下面的功能类型。

  • 未知的包含行为(动态 SQL 或延迟的名称解析)

  • DBCC 命令

  • 系统存储过程

  • 系统标量函数

  • 系统表值函数

  • 系统内置函数

安全性

权限

sys.dm_db_uncontained_entities 仅返回用户对其具有某种权限的对象。 若要完全评估数据库的包含,高特权用户(例如 sysadmin 固定服务器角色的成员或 db_owner 角色)应使用此函数。

示例

sys.dm_db_uncontained_entities下面的示例创建一个名为 P1 的过程,然后查询 。 此查询报告 P1 使用数据库之外的 sys.endpoints。

CREATE DATABASE Test;  
GO  
  
USE Test;  
GO  
CREATE PROC P1  
AS   
SELECT * FROM sys.endpoints ;  
GO  
SELECT SO.name, UE.* FROM sys.dm_db_uncontained_entities AS UE  
LEFT JOIN sys.objects AS SO  
    ON UE.major_id = SO.object_id;  

另请参阅

包含的数据库