OBJECT_ID (Transact-SQL)
スキーマ スコープ オブジェクトのデータベース オブジェクト ID 番号を返します。
重要 |
---|
DDL トリガなど、スキーマ スコープではないオブジェクトは、OBJECT_ID を使用してクエリできません。sys.objects カタログ ビューで見つからないオブジェクトは、適切なカタログ ビューをクエリしてオブジェクト ID 番号を取得してください。たとえば、DDL トリガのオブジェクト ID 番号を取得するには、SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog' を使用します。 |
構文
OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ]
object_name' [ ,'object_type' ] )
引数
'object_name'
使用するオブジェクトを指定します。object_name のデータ型は varchar または nvarchar です。object_name のデータ型が varchar の場合、暗黙的に nvarchar に変換されます。データベース名とスキーマ名の指定は省略可能です。'object_type'
スキーマ スコープのオブジェクトの種類を指定します。object_type のデータ型は varchar または nvarchar です。object_type のデータ型が varchar の場合、暗黙的に nvarchar に変換されます。オブジェクトの種類の一覧については、sys.objects (Transact-SQL) の type 列を参照してください。
戻り値の型
int
例外
空間インデックスに対して、OBJECT_ID は NULL を返します。
エラーが発生した場合は NULL を返します。
ユーザーが所有しているか、または権限を与えられている、セキュリティ保護可能なリソースのメタデータのみを表示できます。つまり、オブジェクトに対する権限がユーザーに与えられていない場合、メタデータを生成する組み込み関数 (OBJECT_ID など) が NULL を返す可能性があります。詳細については、「メタデータ表示の構成」および「メタデータ表示のトラブルシューティング」を参照してください。
説明
システム関数のパラメータを指定しない場合は、現在のデータベース、ホスト コンピュータ、サーバー ユーザー、またはデータベース ユーザーが使用されます。組み込み関数の後には、必ずかっこが必要です。
一時テーブル名を指定する場合は、現在のデータベースが tempdb でない限り、一時テーブル名の前にデータベース名を指定する必要があります。たとえば、SELECT OBJECT_ID('tempdb..#mytemptable') のようにします。
システム関数は、選択リストや WHERE 句のほか、式が許可される場所であればどこでも使用できます。詳細については、「式 (Transact-SQL)」および「WHERE (Transact-SQL)」を参照してください。
例
A. 指定したオブジェクトのオブジェクト ID を返す
次の例では、AdventureWorks データベース内の Production.WorkOrder テーブルのオブジェクト ID を返します。
USE master;
GO
SELECT OBJECT_ID(N'AdventureWorks.Production.WorkOrder') AS 'Object ID';
GO
B. オブジェクトが存在することを確認する
次の例では、指定したテーブルにオブジェクト ID があるかどうかを検証して、テーブルが存在することを確認します。テーブルが存在する場合は削除します。テーブルが存在しない場合、DROP TABLE ステートメントは実行されません。
USE AdventureWorks;
GO
IF OBJECT_ID (N'dbo.AWBuildVersion', N'U') IS NOT NULL
DROP TABLE dbo.AWBuildVersion;
GO
C. OBJECT_ID を使用して、システム関数パラメータの値を指定する
次の例では、AdventureWorks データベース内にある Person.Address テーブルのすべてのインデックスとパーティションについて、sys.dm_db_index_operational_stats 関数を使用して情報を返しています。
重要 |
---|
Transact-SQL 関数 DB_ID および OBJECT_ID を使ってパラメータ値を返すときには、有効な ID が返されることを常に確認してください。データベースまたはオブジェクト名が存在しないか、スペルが間違っていることが原因で見つからない場合は、両方の関数で NULL が返されます。sys.dm_db_index_operational_stats 関数では、NULL 値はすべてのデータベースまたはすべてのオブジェクトを指定するワイルドカード値として解釈されます。これによって意図しない操作が実行される可能性があるので、この例では安全な方法を使用してデータベース ID とオブジェクト ID を特定します。 |
DECLARE @db_id int;
DECLARE @object_id int;
SET @db_id = DB_ID(N'AdventureWorks');
SET @object_id = OBJECT_ID(N'AdventureWorks.Person.Address');
IF @db_id IS NULL
BEGIN;
PRINT N'Invalid database';
END;
ELSE IF @object_id IS NULL
BEGIN;
PRINT N'Invalid object';
END;
ELSE
BEGIN;
SELECT * FROM sys.dm_db_index_operational_stats(@db_id, @object_id, NULL, NULL);
END;
GO