OBJECTPROPERTY (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

現在のデータベース内のスキーマ スコープ オブジェクトに関する情報を返します。 スキーマ スコープ オブジェクトの一覧については、「sys.objects (Transact-SQL)」をご覧ください。 データ定義言語 (DDL) トリガーやイベント通知など、スキーマ スコープ オブジェクト以外のオブジェクトについては、この関数を使用できません。

Transact-SQL 構文表記規則

構文

OBJECTPROPERTY ( id , property )   

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

id
現在のデータベース内のオブジェクトの ID を表す式を指定します。 id のデータ型は int で、現在のデータベース コンテキストでのスキーマ スコープ オブジェクトであることが前提となっています。

property
id で指定されるオブジェクトに対して返される情報を表す式です。property は次のいずれかを指定することができます。

Note

property が有効なプロパティ名でない場合、id が有効なオブジェクト ID でない場合、id が指定した property でサポートされていないオブジェクトの種類であった場合、または呼び出し側にオブジェクトのメタデータを表示する権限がない場合は、特に指定のない限り、NULL が返されます。

プロパティ名 オブジェクトの種類 説明と戻り値
CnstIsClustKey 制約 クラスター化インデックスを指定した PRIMARY KEY 制約。

1 = True

0 = False
CnstIsColumn 制約 単一列に対する CHECK、DEFAULT、または FOREIGN KEY 制約。

1 = True

0 = False
CnstIsDeleteCascade 制約 ON DELETE CASCADE オプションを指定した FOREIGN KEY 制約。

1 = True

0 = False
CnstIsDisabled 制約 制約の無効化。

1 = True

0 = False
CnstIsNonclustKey 制約 非クラスター化インデックスを持つ PRIMARY KEY 制約または UNIQUE 制約。

1 = True

0 = False
CnstIsNotRepl 制約 制約を NOT FOR REPLICATION キーワードを使って定義。

1 = True

0 = False
CnstIsNotTrusted 制約 既存の行を確認せずに制約が有効化されているので、制約がすべての行に対応しているとは限りません。

1 = True

0 = False
CnstIsUpdateCascade 制約 ON UPDATE CASCADE オプションを指定した FOREIGN KEY 制約。

1 = True

0 = False
ExecIsAfterTrigger トリガー AFTER トリガー。

1 = True

0 = False
ExecIsAnsiNullsOn Transact-SQL 関数、Transact-SQL プロシージャ、Transact-SQL トリガー、ビュー 作成時における ANSI_NULLS の設定。

1 = True

0 = False
ExecIsDeleteTrigger トリガー DELETE トリガー。

1 = True

0 = False
ExecIsFirstDeleteTrigger トリガー テーブルに対して DELETE を実行するときに最初に起動されるトリガー。

1 = True

0 = False
ExecIsFirstInsertTrigger トリガー テーブルに対して INSERT を実行するときに最初に起動されるトリガー。

1 = True

0 = False
ExecIsFirstUpdateTrigger トリガー テーブルに対して UPDATE を実行するときに最初に起動されるトリガー。

1 = True

0 = False
ExecIsInsertTrigger トリガー INSERT トリガー。

1 = True

0 = False
ExecIsInsteadOfTrigger トリガー INSTEAD OF トリガー。

1 = True

0 = False
ExecIsLastDeleteTrigger トリガー テーブルに対して DELETE を実行するときに最後に起動されるトリガー。

1 = True

0 = False
ExecIsLastInsertTrigger トリガー テーブルに対して INSERT を実行するときに最後に起動されるトリガー。

1 = True

0 = False
ExecIsLastUpdateTrigger トリガー テーブルに対して UPDATE を実行するときに最後に起動されるトリガー。

1 = True

0 = False
ExecIsQuotedIdentOn Transact-SQL 関数、Transact-SQL プロシージャ、Transact-SQL トリガー、ビュー 作成時における QUOTED_IDENTIFIER の設定。

1 = True

0 = False
ExecIsStartup 手順 スタートアップ プロシージャ。

1 = True

0 = False
ExecIsTriggerDisabled トリガー トリガーの無効化。

1 = True

0 = False
ExecIsTriggerNotForRepl トリガー NOT FOR REPLICATION として定義されているトリガー。

1 = True

0 = False
ExecIsUpdateTrigger トリガー UPDATE トリガー。

1 = True

0 = False
ExecIsWithNativeCompilation Transact-SQL プロシージャ 適用対象: SQL Server 2014 (12.x) 以降。

プロシージャはネイティブでコンパイルされます。

1 = True

0 = False

基本データ型: int
HasAfterTrigger テーブル、ビュー テーブルまたはビューに AFTER トリガーがあります。

1 = True

0 = False
HasDeleteTrigger テーブル、ビュー テーブルまたはビューに DELETE トリガーがあります。

1 = True

0 = False
HasInsertTrigger テーブル、ビュー テーブルまたはビューに INSERT トリガーがあります。

1 = True

0 = False
HasInsteadOfTrigger テーブル、ビュー テーブルまたはビューに INSTEAD OF トリガーがあります。

1 = True

0 = False
HasUpdateTrigger テーブル、ビュー テーブルまたはビューに UPDATE トリガーがあります。

1 = True

0 = False
IsAnsiNullsOn Transact-SQL 関数、Transact-SQL プロシージャ、テーブル、Transact-SQL トリガー、ビュー テーブルの ANSI NULLS オプションが ON であることをことを指定します。 つまり、NULL 値との比較結果はすべて UNKNOWN になります。 この設定は、テーブルが存在する限り、計算列や制約をはじめとするテーブル定義内のすべての式に適用されます。

1 = True

0 = False
IsCheckCnst 任意のスキーマ スコープ オブジェクト CHECK 制約。

1 = True

0 = False
IsConstraint 任意のスキーマ スコープ オブジェクト 列またはテーブルに対する単一列の CHECK、DEFAULT、または FOREIGN KEY 制約です。

1 = True

0 = False
IsDefault 任意のスキーマ スコープ オブジェクト 適用対象: SQL Server 2008 (10.0.x) 以降。

既定のバインド。

1 = True

0 = False
IsDefaultCnst 任意のスキーマ スコープ オブジェクト DEFAULT 制約。

1 = True

0 = False
IsDeterministic 関数、ビュー 関数またはビューの決定性を示すプロパティ。

1 = 決定的

0 = 非決定的
IsEncrypted Transact-SQL 関数、Transact-SQL プロシージャ、テーブル、Transact-SQL トリガー、ビュー モジュール ステートメントの元のテキストが、暗号化した形式に変換されたことを示します。 暗号化した形式の出力は、SQL Server 2005 (9.x) 内のどのカタログ ビューでも直接見ることはできません。 システム テーブルまたはデータベース ファイルへのアクセス権を持たないユーザーは、暗号化した形式のテキストを取得できません。 ただし、DAC ポート経由でシステム テーブルにアクセスする権限、または直接データベース ファイルにアクセスする権限を持っているユーザーは、このテキストを使用できます。 また、サーバー プロセスにデバッガーをアタッチできるユーザーは、実行時、元のプロシージャをメモリから取得できます。

1 = 暗号化

0 = 暗号化なし

基本データ型: int
IsExecuted 任意のスキーマ スコープ オブジェクト オブジェクトが実行可能かどうかを示します (ビュー、プロシージャ、関数、またはトリガー)。

1 = True

0 = False
IsExtendedProc 任意のスキーマ スコープ オブジェクト 拡張プロシージャ。

1 = True

0 = False
IsForeignKey 任意のスキーマ スコープ オブジェクト FOREIGN KEY 制約。

1 = True

0 = False
IsIndexed テーブル、ビュー インデックス付きのテーブルまたはビュー。

1 = True

0 = False
IsIndexable テーブル、ビュー インデックスを作成できるテーブルまたはビュー。

1 = True

0 = False
IsInlineFunction 機能 インライン関数。

1 = インライン関数

0 = インライン関数ではない
IsMSShipped 任意のスキーマ スコープ オブジェクト SQL Server のインストール時に作成されたオブジェクト。

1 = True

0 = False
IsPrimaryKey 任意のスキーマ スコープ オブジェクト PRIMARY KEY 制約。

1 = True

0 = False

NULL = 関数ではありません。またはオブジェクト ID が無効です。
IsProcedure 任意のスキーマ スコープ オブジェクト プロシージャ。

1 = True

0 = False
IsQuotedIdentOn Transact-SQL 関数、Transact-SQL プロシージャ、テーブル、Transact-SQL トリガー、ビュー、CHECK 制約、DEFAULT 定義 オブジェクトの引用符で囲まれた識別子の設定が ON であることを指定します。 オブジェクト定義に含まれるすべての式の中で、識別子は二重引用符で区切られます。

1 = ON

0 = OFF
IsQueue 任意のスキーマ スコープ オブジェクト Service Broker キュー

1 = True

0 = False
IsReplProc 任意のスキーマ スコープ オブジェクト レプリケーション プロシージャ。

1 = True

0 = False
IsRule 任意のスキーマ スコープ オブジェクト ルールのバインド。

1 = True

0 = False
IsScalarFunction 機能 スカラー値関数。

1 = スカラー値関数

0 = スカラー値関数ではない
IsSchemaBound 関数、ビュー SCHEMABINDING を使用して作成されたスキーマ バインド関数またはビュー。

1 = スキーマ バインド

0 = 非スキーマ バインド
IsSystemTable テーブル システム テーブル。

1 = True

0 = False
IsSystemVerified Object SQL Server では、オブジェクトの決定性のプロパティと有効桁数のプロパティを確認できます。

1 = True

0 = False
IsTable テーブル テーブル。

1 = True

0 = False
IsTableFunction 機能 テーブル値関数。

1 = テーブル値関数

0 = テーブル値関数ではない
IsTrigger 任意のスキーマ スコープ オブジェクト トリガー。

1 = True

0 = False
IsUniqueCnst 任意のスキーマ スコープ オブジェクト UNIQUE 制約。

1 = True

0 = False
IsUserTable テーブル ユーザー定義テーブル。

1 = True

0 = False
IsView View ビュー。

1 = True

0 = False
OwnerId 任意のスキーマ スコープ オブジェクト オブジェクトの所有者。

注: スキーマ所有者はオブジェクト所有者である必要はありません。 たとえば、子オブジェクト (parent_object_id が NULL でないオブジェクト) では、常に親オブジェクトと同じ所有者 ID が返されます。

NULL 以外 = オブジェクト所有者のデータベース ユーザー ID です。
SchemaId 任意のスキーマ スコープ オブジェクト オブジェクトが所属するスキーマのスキーマ ID。
TableDeleteTrigger テーブル テーブルに DELETE トリガーがあります。

>1 = 指定された種類の最初のトリガーの ID。
TableDeleteTriggerCount テーブル テーブルには指定された数の DELETE トリガーがあります。

>0 = DELETE トリガーの数。
TableFullTextMergeStatus テーブル 適用対象: SQL Server 2008 (10.0.x) 以降。

現在マージ中のフルテキスト インデックスがテーブルにあるかどうかを示します。

0 = テーブルにフルテキスト インデックスがないか、フルテキスト インデックスがマージ中ではない

1 = フルテキスト インデックスがマージ中。
TableFullTextBackgroundUpdateIndexOn テーブル 適用対象: SQL Server 2008 (10.0.x) 以降。

テーブルではフルテキスト インデックスのバックグラウンド更新 (変更の自動追跡) が有効です。

1 = TRUE

0 = FALSE
TableFulltextCatalogId テーブル 適用対象: SQL Server 2008 (10.0.x) 以降。

テーブルのフルテキスト インデックス データが存在する、フルテキスト カタログの ID。

0 以外 = フルテキスト インデックス テーブル内の行を識別する一意なインデックスに関連付けられた、フルテキスト カタログ ID。

0 = テーブルにフルテキスト インデックスはない。
TableFulltextChangeTrackingOn テーブル 適用対象: SQL Server 2008 (10.0.x) 以降。

テーブルでは、フルテキストの変更の追跡が有効になっています。

1 = TRUE

0 = FALSE
TableFulltextDocsProcessed テーブル 適用対象: SQL Server 2008 (10.0.x) 以降。

フルテキスト インデックス作成の開始以降に処理された行の数。 フルテキスト検索用にインデックスが作成されるテーブルでは、1 行のすべての列が、インデックスが作成される 1 つのドキュメントの一部と見なされます。

0 = アクティブ クロールまたはフルテキスト インデックス作成は完了していない。

> 0 = 次のいずれか (A または B): A) 完全、増分、または手動による変更追跡の作成開始以降、挿入操作や更新操作で処理されたドキュメントの数です。 B) バックグラウンド更新インデックス作成の有効化、フルテキスト インデックス スキーマの変更、フルテキスト カタログの再構築、または SQL Server のインスタンスの再起動などの変更の追跡以降、挿入操作や更新操作で処理された行数。

NULL = テーブルにフルテキスト インデックスはない。

このプロパティによって、削除された行の監視またはカウントは行われません。
TableFulltextFailCount テーブル 適用対象: SQL Server 2008 (10.0.x) 以降。

フルテキスト検索によるインデックスが設定されなかった行数。

0 = 作成完了

> 0 = 次のいずれか (A または B): A) 完全、増分、または手動更新による変更追跡の作成開始以降に、インデックスが作成されなかったドキュメントの数。 B) インデックスのバックグラウンド更新による変更追跡の場合、作成の開始または再開以降にインデックスが作成されなかった行数。 これは、スキーマの変更、カタログの再構築、サーバーの再起動などにより発生する場合があります。

NULL = テーブルにフルテキスト インデックスはない。
TableFulltextItemCount テーブル 適用対象: SQL Server 2008 (10.0.x) 以降。

フルテキスト インデックスが正常に設定された行数。
TableFulltextKeyColumn テーブル 適用対象: SQL Server 2008 (10.0.x) 以降。

フルテキスト インデックス定義に関係している、一意な単一列インデックスに関連付けられた列の ID。

0 = テーブルにフルテキスト インデックスはない。
TableFulltextPendingChanges テーブル 適用対象: SQL Server 2008 (10.0.x) 以降。

変更の追跡が処理されていないエントリ数。

0 = 変更の追跡は有効でない

NULL = テーブルにフルテキスト インデックスはない。
TableFulltextPopulateStatus テーブル 適用対象: SQL Server 2008 (10.0.x) 以降。

0 = アイドル状態

1 = 全体を作成中

2 = 増分作成中

3 = 追跡した変更を伝達中

4 = 自動変更の追跡など、インデックスのバックグラウンド更新が進行中

5 = フルテキスト インデックス作成が絞り込みまたは停止された
TableHasActiveFulltextIndex テーブル 適用対象: SQL Server 2008 (10.0.x) 以降。

テーブルにアクティブなフルテキスト インデックスがあります。

1 = True

0 = False
TableHasCheckCnst テーブル テーブルに CHECK 制約があります。

1 = True

0 = False
TableHasClustIndex テーブル テーブルにクラスター化インデックスがあります。

1 = True

0 = False
TableHasDefaultCnst テーブル テーブルに DEFAULT 制約があります。

1 = True

0 = False
TableHasDeleteTrigger テーブル テーブルに DELETE トリガーがあります。

1 = True

0 = False
TableHasForeignKey テーブル テーブルに FOREIGN KEY 制約があります。

1 = True

0 = False
TableHasForeignRef テーブル テーブルは FOREIGN KEY 制約により参照されています。

1 = True

0 = False
TableHasIdentity テーブル テーブルに ID 列があります。

1 = True

0 = False
TableHasIndex テーブル テーブルに任意の種類のインデックスがあります。

1 = True

0 = False
TableHasInsertTrigger テーブル オブジェクトに INSERT トリガーがあります。

1 = True

0 = False
TableHasNonclustIndex テーブル テーブルには非クラスター化インデックスがあります。

1 = True

0 = False
TableHasPrimaryKey テーブル テーブルに主キーがあります。

1 = True

0 = False
TableHasRowGuidCol テーブル テーブルには、uniqueidentifier 列用の ROWGUIDCOL があります。

1 = True

0 = False
TableHasTextImage テーブル テーブルには、textntext、または image 列があります。

1 = True

0 = False
TableHasTimestamp テーブル テーブルには、timestamp 列があります。

1 = True

0 = False
TableHasUniqueCnst テーブル テーブルに UNIQUE 制約があります。

1 = True

0 = False
TableHasUpdateTrigger テーブル オブジェクトには UPDATE トリガーがあります。

1 = True

0 = False
TableHasVarDecimalStorageFormat テーブル テーブルで vardecimal ストレージ形式が有効になっています。

1 = True

0 = False
TableInsertTrigger テーブル テーブルに INSERT トリガーがあります。

>1 = 指定された種類の最初のトリガーの ID。
TableInsertTriggerCount テーブル テーブルには指定された数の INSERT トリガーがあります。

>0 = INSERT トリガーの数。
TableIsFake テーブル テーブルは実在せず、 SQL Server データベース エンジンによって、要求時に実際の領域が内部で確保されます。

1 = True

0 = False
TableIsLockedOnBulkLoad テーブル bcp または BULK INSERT ジョブによってテーブルがロックされています。

1 = True

0 = False
TableIsMemoryOptimized テーブル 適用対象: SQL Server 2014 (12.x) 以降。

テーブルはメモリ最適化されています

1 = True

0 = False

基本データ型: int

詳細については、「 インメモリ OLTP (インメモリ最適化)」を参照してください。
TableIsPinned テーブル テーブルは固定され、データ キャッシュに確保されています。

0 = False

この機能は SQL Server 2005 (9.x) 以降ではサポートされていません。
TableTextInRowLimit テーブル text in row に許可されている最大バイト数。

text in row オプションが設定されていない場合は 0 です。
TableUpdateTrigger テーブル テーブルに UPDATE トリガーがあります。

> 1 = 指定された種類の最初のトリガーの ID。
TableUpdateTriggerCount テーブル テーブルには指定された数の UPDATE トリガーがあります。

> 0 = UPDATE トリガーの数。
TableHasColumnSet テーブル テーブルに列セットがあります。

0 = False

1 = True

詳細については、「 列セットの使用」を参照してください。
TableTemporalType テーブル 適用対象: SQL Server 2016 (13.x) 以降。

テーブルの種類を指定します。

0 = 非テンポラル テーブル

1 = システムのバージョン情報のテーブルの履歴テーブル

2 = システムのバージョン情報のテンポラル テーブル

戻り値の型

int

例外

エラーが発生した場合、または呼び出し元にオブジェクトの表示権限がない場合は、NULL が返されます。

アクセス許可

ユーザーが所有しているか、または権限を与えられている、セキュリティ保護可能なリソースのメタデータのみを表示できます。 つまり、オブジェクトに対する権限がユーザーに与えられていない場合、メタデータを生成する組み込み関数 (OBJECTPROPERTY など) が NULL を返す可能性があります。 詳細については、「 Metadata Visibility Configuration」を参照してください。

解説

データベース エンジン を前提としています object_id が現在のデータベース コンテキストでします。 別のデータベースの object_id を参照するクエリは、NULL または正しくない値を返します。 たとえば、次のクエリでは、現在のデータベース コンテキストは master データベースです。 データベース エンジンは、クエリ内で指定されたデータベースではなく、このデータベースの指定された object_id のプロパティ値を返します。 ビュー vEmployee は master データベース内にないため、このクエリでは正しくない結果が返されます。

USE master;  
GO  
SELECT OBJECTPROPERTY(OBJECT_ID(N'AdventureWorks2022.HumanResources.vEmployee'), 'IsView');  
GO  

OBJECTPROPERTY(view_id, 'IsIndexable') は、多くのコンピューター リソースを使用する可能性があります。これは、IsIndexable プロパティを評価するために、ビュー定義、正規化、および部分最適化の解析が必要なためです。 IsIndexable プロパティではインデックスを作成できるテーブルまたはビューを指定しますが、特定のインデックス キーの要件が満たされない場合、インデックスの実際の作成は失敗します。 詳細については、「 CREATE INDEX (Transact-SQL)」を参照してください。

OBJECTPROPERTY(table_id, 'TableHasActiveFulltextIndex') は、テーブルの少なくとも 1 つの列にインデックスが作成されている場合は、1 (TRUE) を返します。 インデックス作成で先頭の列が追加されるとすぐ、フルテキスト インデックス作成が自動的にアクティブになります。

テーブルを作成するときに QUOTED IDENTIFIER オプションが OFF に設定されている場合でも、作成されるテーブルのメタデータでは、このオプションは常に ON として格納されます。 したがって、OBJECTPROPERTY(table_id, 'IsQuotedIdentOn') は常に 1 (TRUE) を返します。

A. オブジェクトがテーブルかどうかを確認する

次の例では、UnitMeasureAdventureWorks2022 データベースのテーブルかどうかをテストします。

USE AdventureWorks2022;  
GO  
IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 1  
   PRINT 'UnitMeasure is a table.'  
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 0  
   PRINT 'UnitMeasure is not a table.'  
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') IS NULL  
   PRINT 'ERROR: UnitMeasure is not a valid object.';  
GO  

B. スカラー値ユーザー定義関数の決定性を確認する

次の例では、money 値を返すユーザー定義のスカラー値関数である ufnGetProductDealerPrice が決定的であるかどうかをテストします。

USE AdventureWorks2022;  
GO  
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetProductDealerPrice'), 'IsDeterministic');  
GO  

結果セットは、ufnGetProductDealerPrice が決定論的関数でないことを示しています。

-----  
0

C: 特定のスキーマに属するテーブルを見つける

次の例は、dbo スキーマのすべてのテーブルを返します。

-- Uses AdventureWorks  
  
SELECT name, object_id, type_desc  
FROM sys.objects   
WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'dbo')  
ORDER BY type_desc, name;  
GO  

例: Azure Synapse Analytics、Analytics Platform System (PDW)

D: オブジェクトがテーブルかどうかを確認する

次の例では、dbo.DimResellerAdventureWorksPDW2022 データベースのテーブルかどうかをテストします。

-- Uses AdventureWorks  
  
IF OBJECTPROPERTY (OBJECT_ID(N'dbo.DimReseller'),'ISTABLE') = 1  
   SELECT 'DimReseller is a table.'  
ELSE   
   SELECT 'DimReseller is not a table.';  
GO  

関連項目

COLUMNPROPERTY (Transact-SQL)
メタデータ関数 (Transact-SQL)
OBJECTPROPERTYEX (Transact-SQL)
ALTER AUTHORIZATION (Transact-SQL)
TYPEPROPERTY (Transact-SQL)
sys.objects (Transact-SQL)