OBJECTPROPERTY (Transact-SQL)
現在のデータベース内のスキーマ スコープ オブジェクトについての情報を返します。スキーマ スコープ オブジェクトの一覧については、「sys.objects (Transact-SQL)」を参照してください。データ定義言語 (DDL) トリガやイベント通知など、スキーマ スコープ オブジェクト以外のオブジェクトについては、この関数を使用できません。
構文
OBJECTPROPERTY ( id , property )
引数
id
現在のデータベース内のオブジェクトの ID を表す式を指定します。id のデータ型は int で、現在のデータベース コンテキストでのスキーマ スコープ オブジェクトであることが前提となっています。property
id で指定されるオブジェクトに対して返される情報を表す式です。property は次のいずれかの値をとります。注意 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
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
任意のスキーマ スコープ オブジェクト
既定のバインドです。
1 = TRUE
0 = FALSE
IsDefaultCnst
任意のスキーマ スコープ オブジェクト
DEFAULT 制約です。
1 = TRUE
0 = FALSE
IsDeterministic
関数、ビュー
関数またはビューの決定性を示すプロパティです。
1 = 決定的
0 = 非決定的
IsEncrypted
Transact-SQL 関数、Transact-SQL プロシージャ、テーブル、Transact-SQL トリガ、ビュー
モジュール ステートメントの元のテキストが、暗号化した形式に変換されたことを示します。暗号化した形式の出力は、SQL Server 2005 内のどのカタログ ビューでも直接見ることはできません。システム テーブルまたはデータベース ファイルへのアクセス権を持たないユーザーは、暗号化した形式のテキストを取得できません。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
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
ビュー
ビューです。
1 = TRUE
0 = FALSE
OwnerId
任意のスキーマ スコープ オブジェクト
オブジェクトの所有者です。
注意スキーマの所有者は必ずしもオブジェクトの所有者ではありません。たとえば、子オブジェクト (parent_object_id が NULL でないオブジェクト) では、常に親オブジェクトと同じ所有者 ID が返されます。NULL 以外 = オブジェクト所有者のデータベース ユーザー ID です。
TableDeleteTrigger
テーブル
テーブルには DELETE トリガがあります。
>1 = 指定された型の最初のトリガの ID です。
TableDeleteTriggerCount
テーブル
テーブルには指定された数の DELETE トリガがあります。
>0 = DELETE トリガの数です。
TableFullTextMergeStatus
テーブル
現在マージ中のフルテキスト インデックスがテーブルにあるかどうかを示します。
0 = テーブルにフルテキスト インデックスがないか、フルテキスト インデックスがマージ中ではありません。
1 = フルテキスト インデックスがマージ中です。
TableFullTextBackgroundUpdateIndexOn
テーブル
テーブルではフルテキスト インデックスのバックグラウンド更新 (変更の自動追跡) が有効です。
1 = TRUE
0 = FALSE
TableFulltextCatalogId
テーブル
テーブルのフルテキスト インデックス データが存在する、フルテキスト カタログの ID です。
0 以外 = フルテキスト カタログ ID。フルテキスト インデックス テーブル内の行を識別する、一意なインデックスに関連付けられています。
0 = テーブルにフルテキスト インデックスがありません。
TableFulltextChangeTrackingOn
テーブル
テーブルではフルテキストの変更の追跡が有効です。
1 = TRUE
0 = FALSE
TableFulltextDocsProcessed
テーブル
フルテキスト インデックス作成が開始されてから処理された行数です。フルテキスト検索用のインデックスが作成されたテーブルでは、単一行のすべての列が 1 つのドキュメントの一部と見なされてインデックスが設定されます。
0 = アクティブなクロールまたはフルテキスト インデックスが作成されていません。
> 0 = 以下のいずれかを示します。
完全、増分、または手動による変更追跡の作成開始以降、挿入操作や更新操作で処理されたドキュメントの数です。
バックグラウンド更新インデックス作成の有効化、フルテキスト インデックス スキーマの変更、フルテキスト カタログの再構築、または SQL Server のインスタンスの再起動などの変更の追跡以降、挿入操作や更新操作で処理された行数です。
NULL = テーブルにフルテキスト インデックスがありません。
注意このプロパティは、削除された行を監視またはカウントしません。TableFulltextFailCount
テーブル
フルテキスト検索によるインデックスが設定されなかった行数です。
0 = 作成が完了しました。
> 0 = 以下のいずれかを示します。
全作成、増分作成、または手動更新による変更の追跡に基づく作成が開始された後、インデックスが設定されなかったドキュメント数です。
バックグラウンド更新インデックスによる変更の追跡の場合は、作成の開始または再開が行われた後、インデックスが設定されなかった行数です。この理由として、スキーマの変更、カタログの再作成、サーバーの再起動などが考えられます。
NULL = テーブルにフルテキスト インデックスがありません。
TableFulltextItemCount
テーブル
フルテキスト インデックスが正常に設定された行数です。
TableFulltextKeyColumn
テーブル
フルテキスト インデックス定義に関係している、一意な単一列インデックスに関連付けられた列の ID です。
0 = テーブルにフルテキスト インデックスがありません。
TableFulltextPendingChanges
テーブル
変更の追跡が処理されていないエントリ数です。
0 = 変更の追跡が有効ではありません。
NULL = テーブルにフルテキスト インデックスがありません。
TableFulltextPopulateStatus
テーブル
0 = アイドル状態です。
1 = カタログを全作成しています。
2 = 増分作成しています。
3 = 追跡された変更を反映しています。
4 = 変更の自動追跡などのバックグラウンド更新インデックスが実行中です。
5 = フルテキスト インデックスが絞り込まれているか、または一時停止されています。
TableHasActiveFulltextIndex
テーブル
テーブルにはアクティブなフルテキスト インデックスがあります。
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
テーブル
テーブルには text 列、ntext 列、または 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
TableIsPinned
テーブル
テーブルが固定されて、データ キャッシュに確保されます。
0 = FALSE
この機能は SQL Server 2005 以降ではサポートされていません。
TableTextInRowLimit
テーブル
text in row で許可される最大バイト数です。
text in row オプションが設定されていない場合は 0 です。
TableUpdateTrigger
テーブル
テーブルには UPDATE トリガがあります。
>1 = 指定された型の最初のトリガの ID です。
TableUpdateTriggerCount
テーブル
テーブルには指定された数の UPDATE トリガがあります。
>0 = UPDATE トリガの数です。
TableHasColumnSet
テーブル
テーブルに列セットがあります。
0 = FALSE
1 = TRUE
詳細については、「列セットの使用」を参照してください。
戻り値の型
int
例外
エラーが発生した場合、または呼び出し元にオブジェクトの表示権限がない場合は、NULL が返されます。
ユーザーが所有しているか、または権限を与えられている、セキュリティ保護可能なリソースのメタデータのみを表示できます。つまり、オブジェクトに対する権限がユーザーに与えられていない場合、メタデータを生成する組み込み関数 (OBJECTPROPERTY など) が NULL を返す可能性があります。詳細については、「メタデータ表示の構成」および「メタデータ表示のトラブルシューティング」を参照してください。
説明
データベース エンジンでは、object_id が現在のデータベース コンテキスト内にあることが前提となっています。別のデータベースにある object_id を参照するクエリでは、NULL または不適切な結果が返されます。たとえば、次のクエリでは、現在のデータベースのコンテキストは master データベースです。データベース エンジンは、クエリ内で指定されたデータベースではなく、このデータベースの指定された object_id のプロパティ値を返します。vEmployee ビューが master データベースに存在しないため、このクエリは不正な結果を返します。
USE master;
GO
SELECT OBJECTPROPERTY(OBJECT_ID(N'AdventureWorks.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. オブジェクトがテーブルかどうかを確認する
次の例では、UnitMeasure が AdventureWorks データベースのテーブルかどうかをテストします。
USE AdventureWorks;
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 AdventureWorks;
GO
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetProductDealerPrice'), 'IsDeterministic');
GO
結果セットは、ufnGetProductDealerPrice が決定的関数でないことを示しています。
-----
0
C. 特定のスキーマに属するオブジェクトを見つける
次の例では、SchemaId プロパティを使用して、スキーマ Production に属するすべてのオブジェクトを返します。
USE AdventureWorks;
GO
SELECT name, object_id, type_desc
FROM sys.objects
WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'Production')
ORDER BY type_desc, name;
GO