OBJECTPROPERTY (Transact-SQL)

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

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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