sys.objects (Transact-SQL)
データベース内で作成されるユーザー定義のスキーマ スコープ オブジェクトごとに 1 行のデータを格納します。
注意 |
---|
DDL トリガはスキーマ スコープでないため、sys.objects では DDL トリガは表示されません。DML と DDL の両方を含むすべてのトリガは、sys.triggers に格納されます。sys.triggers には、さまざまな種類のトリガの名前スコープ ルールを混在させて格納できます。 |
列名 |
データ型 |
説明 |
---|---|---|
name |
sysname |
オブジェクト名です。 |
object_id |
int |
オブジェクト ID 番号です。データベース内で一意です。 |
principal_id |
int |
スキーマの所有者と異なる場合の所有者の ID。既定では、スキーマに含まれるオブジェクトは、スキーマの所有者によって所有されます。ただし、ALTER AUTHORIZATION ステートメントを使用して所有権を変更することにより、別の所有者を指定できます。 別の所有者がいない場合は NULL になります。 オブジェクトの型が次のいずれかの場合は NULL になります。 C = CHECK 制約 D = DEFAULT (制約またはスタンドアロン) F = FOREIGN KEY 制約 PK = PRIMARY KEY 制約 R = ルール (旧形式、スタンドアロン) TA = アセンブリ (CLR 統合) トリガ TR = SQL トリガ UQ = UNIQUE 制約 |
schema_id |
int |
オブジェクトが含まれているスキーマの ID。 スキーマ スコープ システム オブジェクトは、常に sys スキーマまたは INFORMATION_SCHEMA スキーマに含まれています。 |
parent_object_id |
int |
このオブジェクトが所属するオブジェクトの ID です。 0 = 子オブジェクトではありません。 |
type |
char(2) |
オブジェクトの種類です。 AF = 集計関数 (CLR) C = CHECK 制約 D = DEFAULT (制約またはスタンドアロン) F = FOREIGN KEY 制約 FN = SQL スカラ関数 FS = アセンブリ (CLR) スカラ関数 FT = アセンブリ (CLR) テーブル値関数 IF = SQL インライン テーブル値関数 IT = 内部テーブル P = SQL ストアド プロシージャ PC = アセンブリ (CLR) ストアド プロシージャ PG = プラン ガイド PK = PRIMARY KEY 制約 R = ルール (旧形式、スタンドアロン) RF = レプリケーション フィルタ プロシージャ S = システム ベース テーブル SN = シノニム SQ = サービス キュー TA = アセンブリ (CLR) DML トリガ TF = SQL テーブル値関数 TR = SQL DML トリガ TT = テーブルの種類 U = テーブル (ユーザー定義) UQ = UNIQUE 制約 V = ビュー X = 拡張ストアド プロシージャ |
type_desc |
nvarchar(60) |
オブジェクトの種類の説明です。 AGGREGATE_FUNCTION CHECK_CONSTRAINT DEFAULT_CONSTRAINT FOREIGN_KEY_CONSTRAINT SQL_SCALAR_FUNCTION CLR_SCALAR_FUNCTION CLR_TABLE_VALUED_FUNCTION SQL_INLINE_TABLE_VALUED_FUNCTION INTERNAL_TABLE SQL_STORED_PROCEDURE CLR_STORED_PROCEDURE PLAN_GUIDE PRIMARY_KEY_CONSTRAINT RULE REPLICATION_FILTER_PROCEDURE SYSTEM_TABLE SYNONYM SERVICE_QUEUE CLR_TRIGGER SQL_TABLE_VALUED_FUNCTION SQL_TRIGGER TABLE_TYPE USER_TABLE UNIQUE_CONSTRAINT VIEW EXTENDED_STORED_PROCEDURE |
create_date |
datetime |
オブジェクトが作成された日付です。 |
modify_date |
datetime |
オブジェクトが ALTER ステートメントを使用して最後に変更された日付です。オブジェクトがテーブルまたはビューの場合は、テーブルやビューのクラスタ化インデックスが作成または変更されると、modify_date も変更されます。 |
is_ms_shipped |
bit |
オブジェクトが内部 SQL Server コンポーネントによって作成されることを示します。 |
is_published |
bit |
オブジェクトがパブリッシュされることを示します。 |
is_schema_published |
bit |
オブジェクトのスキーマのみがパブリッシュされることを示します。 |
説明
sys.objects に表示されるオブジェクトには、OBJECT_ID、OBJECT_NAME、および OBJECTPROPERTY() 組み込み関数を適用できます。
このビューと同じスキーマを使用する別のビューとして、システム オブジェクトを表示する sys.system_objects というビューがあります。また、システム オブジェクトとユーザー オブジェクトの両方を表示する sys.all_objects というビューもあります。3 つのカタログ ビューは、すべて同じ構造です。
このバージョンの SQL Server では、XML インデックスや空間インデックスなどの拡張インデックスは、sys.objects で内部テーブルと見なされます (type = IT および type_desc = INTERNAL_TABLE)。拡張インデックスの場合は次のようになります。
name はインデックス テーブルの内部名です。
parent_object_id はベース テーブルの object_id です。
is_ms_shipped、is_published、is_schema_published の各列は 0 に設定されます。
権限
SQL Server 2005 以降のバージョンでは、カタログ ビューでのメタデータの表示が、ユーザーが所有しているかそのユーザーが権限を許可されている、セキュリティ保護可能なメタデータに制限されます。詳細については、「メタデータ表示の構成」を参照してください。
例
A. 過去 n 日間に変更されたすべてのオブジェクトを返す
次のクエリの <database_name> と <n_days> を有効な値に置き換えてから、クエリを実行します。
USE <database_name>;
GO
SELECT name AS object_name
,SCHEMA_NAME(schema_id) AS schema_name
,type_desc
,create_date
,modify_date
FROM sys.objects
WHERE modify_date > GETDATE() - <n_days>
ORDER BY modify_date;
GO
B. 指定されたストアド プロシージャまたは関数に対するパラメータを返す
次のクエリの <database_name> と <schema_name.object_name> を有効な名前に置き換えてから、クエリを実行します。
USE <database_name>;
GO
SELECT SCHEMA_NAME(schema_id) AS schema_name
,o.name AS object_name
,o.type_desc
,p.parameter_id
,p.name AS parameter_name
,TYPE_NAME(p.user_type_id) AS parameter_type
,p.max_length
,p.precision
,p.scale
,p.is_output
FROM sys.objects AS o
INNER JOIN sys.parameters AS p ON o.object_id = p.object_id
WHERE o.object_id = OBJECT_ID('<schema_name.object_name>')
ORDER BY schema_name, o.object_name, p.parameter_id;
GO
C. データベース内のすべてのユーザー定義関数を返す
次のクエリの <database_name> を有効なデータベース名に置き換えてから、クエリを実行します。
USE <database_name>;
GO
SELECT name AS function_name
,SCHEMA_NAME(schema_id) AS schema_name
,type_desc
,create_date
,modify_date
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION%';
GO
D. スキーマ内の各オブジェクトの所有者を返す
次のクエリの <database_name> と <schema_name> をすべて有効な名前に置き換えてから、クエリを実行します。
USE <database_name>;
GO
SELECT 'OBJECT' AS entity_type
,USER_NAME(OBJECTPROPERTY(object_id, 'OwnerId')) AS owner_name
,name
FROM sys.objects WHERE SCHEMA_NAME(schema_id) = '<schema_name>'
UNION
SELECT 'TYPE' AS entity_type
,USER_NAME(TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'OwnerId')) AS owner_name
,name
FROM sys.types WHERE SCHEMA_NAME(schema_id) = '<schema_name>'
UNION
SELECT 'XML SCHEMA COLLECTION' AS entity_type
,COALESCE(USER_NAME(xsc.principal_id),USER_NAME(s.principal_id)) AS owner_name
,xsc.name
FROM sys.xml_schema_collections AS xsc JOIN sys.schemas AS s
ON s.schema_id = xsc.schema_id
WHERE s.name = '<schema_name>';
GO
変更履歴
変更内容 |
---|
TT = テーブルの種類が type 列に追加されました。 |