sys.dm_db_uncontained_entities (Transact-SQL)

 

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

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

适用范围:SQL Server(SQL Server 2012 到当前版本)。

列名

类型

说明

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。

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

如果 class = 30,则为 sys.database_audit_specifications.databse_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_ name

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;

请参阅

包含的数据库