sys.dm_db_uncontained_entities (Transact-SQL)

显示数据库中使用的任何非包含对象。 非包含对象是跨包含数据库中的数据库边界的对象。 此视图可同时从包含数据库和非包含数据库进行访问。 如果 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。

如果 class = 1,则为 object_id

如果 class = 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。

statement_line_number

int

如果此类是一个模块,则返回找到非包含使用所在的行号。 否则,值为 Null。

statement_ offset_begin

int

如果此类是一个模块,则指示非包含使用开始的起始位置(以字节表示,从 0 开始)。 否则,返回值为 Null。

statement_ offset_end

int

如果此类是一个模块,则指示非包含使用的结束位置(以字节表示,从 0 开始)。 值为 -1 指示模块的结尾。 否则,返回值为 Null。

statement_type

nvarchar(512)

语句的类型。

feature_ name

nvarchar(256)

返回对象的外部名称。

feature_type_name

nvarchar(256)

返回功能的类型。

注释

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

将报告下面的功能类型。

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

  • DBCC 命令

  • 系统存储过程

  • 系统标量函数

  • 系统表值函数

  • 系统内置函数

安全性

权限

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

示例

下面的示例创建一个名为 P1 的过程,然后查询 sys.dm_db_uncontained_entities。 此查询报告 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;

请参阅

概念

包含数据库