次の方法で共有


OBJECTPROPERTY (Transact-SQL)

更新 : 2006 年 12 月 12 日

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

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

構文

OBJECTPROPERTY ( id , property ) 

引数

  • id
    現在のデータベース内のオブジェクトの ID を表す式を指定します。id のデータ型は int で、現在のデータベース コンテキストでのスキーマ スコープ オブジェクトであることが前提となっています。
  • property
    id で指定されるオブジェクトに対して返される情報を表す式です。property は次のいずれかの値をとります。

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

    プロパティ名

戻り値の型

int

例外

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

SQL Server 2005 では、そのユーザーが所有しているか、または権限を与えられているセキュリティ保護可能なアイテムのメタデータのみを表示できます。つまり、オブジェクトに対する権限がユーザーに与えられていない場合、メタデータを生成する組み込み関数 (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. オブジェクトがテーブルかどうかを確認する

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

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

参照

関連項目

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

その他の技術情報

ユーザーとスキーマの分離

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 12 月 12 日

新しい内容 :
  • Service Pack 2 で使用できるようになった TableHasVarDecimalStorageFormat プロパティを追加しました。

2006 年 7 月 17 日

新しい内容 :
  • 「例外」を追加しました。

2005 年 12 月 5 日

変更内容
  • IsTableFunction および IsScalarFunction プロパティの定義を修正。
  • 例 C を修正。