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 行のすべての列が、インデックスが作成される 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'AdventureWorks2008R2.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 が AdventureWorks2008R2 データベースのテーブルかどうかをテストします。
USE AdventureWorks2008R2;
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 AdventureWorks2008R2;
GO
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetProductDealerPrice'), 'IsDeterministic');
GO
結果セットは、ufnGetProductDealerPrice が決定的関数でないことを示しています。
-----
0
C. 特定のスキーマに属するオブジェクトを見つける
次の例では、SchemaId プロパティを使用して、スキーマ Production に属するすべてのオブジェクトを返します。
USE AdventureWorks2008R2;
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