sys.dm_db_uncontained_entities (Transact-SQL)
適用対象: SQL サーバー
データベースで使用される非包含オブジェクトを表示します。 非包含オブジェクトとは、包含データベースのデータベース境界を越えるオブジェクトです。 このビューには、包含データベースと非包含データベースの両方からアクセスできます。 sys.dm_db_uncontained_entitiesが空の場合、データベースは非包含エンティティを使用しません。
モジュールがデータベース境界を 2 回以上越えている場合、最初に検出された交差のみが報告されます。
列名 | Type | 説明 |
---|---|---|
クラス | 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.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 ロールのメンバーなど、高い特権を持つユーザーこの関数を使用する必要があります。
例
次の例では、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;