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 ASSEMBLY TYPE INDEX DATABASE_DDL_TRIGGER ROUTE AUDIT_SPECIFICATION |
major_id | int | 实体的 ID。 如果 类 = 1,则object_id 如果 class = 4,则sys.database_principals.principal_id。 如果 class = 5,则sys.assemblies.assembly_id。 如果 类 = 6,则sys.types.user_type_id。 如果 类 = 7,则sys.indexes.index_id。 如果 类 = 12,则sys.triggers.object_id。 如果 class = 19,则sys.routes.route_id。 如果 类 = 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;