OBJECT_ID (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

スキーマ スコープ オブジェクトのデータベース オブジェクト ID 番号を返します。

重要

DDL トリガーなどのスキーマ スコープでないオブジェクトは、OBJECT_ID を使用してクエリできません。 sys.objects カタログ ビューにないオブジェクトについては、適切なカタログ ビューを照会してオブジェクト ID 番号を取得してください。 たとえば、DDL トリガーのオブジェクト ID 番号を取得するには、SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog``' を使用します。

Transact-SQL 構文表記規則

構文

OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ]   
  object_name' [ ,'object_type' ] )  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

'object_name'
使用するオブジェクトです。 object_namevarchar または nvarchar です。 場合 object_namevarchar, に暗黙的に変換されます nvarchar です。 データベース名とスキーマ名の指定は省略可能です。

'object_type'
スキーマ スコープのオブジェクトの種類です。 object_typevarchar または nvarchar です。 場合 object_typevarchar, に暗黙的に変換されます nvarchar です。 オブジェクトの種類の一覧については、「sys.objects (Transact-SQL)」の type 列を参照してください。

戻り値の型

int

例外

空間インデックスに対して、OBJECT_ID は NULL を返します。

エラーが発生した場合は NULL を返します。

ユーザーが所有しているか、または権限を与えられている、セキュリティ保護可能なリソースのメタデータのみを表示できます。 つまり、オブジェクトに対する権限がユーザーに与えられていない場合、メタデータを生成する組み込み関数 (OBJECT_ID など) が NULL を返す可能性があります。 詳細については、「 Metadata Visibility Configuration」を参照してください。

解説

システム関数へのパラメーターが省略可能の場合は、現在のデータベース、ホスト コンピューター、サーバー ユーザー、またはデータベース ユーザーが推測されます。 組み込み関数の後には常にかっこが必要です。

一時テーブル名を指定する場合は、現在のデータベースが tempdb でない限り、一時テーブル名の前にデータベース名を指定する必要があります。 (例: SELECT OBJECT_ID('tempdb..#mytemptable'))。

システム関数は、選択リストの中、WHERE 句の中、また、式を使える所ならどこにでも使用できます。 詳しくは、「式 (Transact-SQL)」および「WHERE (Transact-SQL)」をご覧ください。

A. 指定したオブジェクトのオブジェクト ID を返す

次の例は、AdventureWorks2022 データベースの Production.WorkOrder テーブルのオブジェクト ID を返します。

USE master;  
GO  
SELECT OBJECT_ID(N'AdventureWorks2022.Production.WorkOrder') AS 'Object ID';  
GO  

B. オブジェクトが存在することを確認する

次の例では、指定したテーブルにオブジェクト ID があることを確認して、テーブルが存在するかどうかをチェックします。 テーブルが存在する場合は、削除されます。 テーブルが存在しない場合、DROP TABLE ステートメントは実行されません。

USE AdventureWorks2022;  
GO  
IF OBJECT_ID (N'dbo.AWBuildVersion', N'U') IS NOT NULL  
DROP TABLE dbo.AWBuildVersion;  
GO  

C. OBJECT_ID を使用して、システム関数パラメーターの値を指定する

次の例では、sys.dm_db_index_operational_stats 関数を使って、AdventureWorks2022 データベースの Person.Address テーブルのすべてのインデックスとパーティションに関する情報を取得します。

Note

この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。

重要

Transact-SQL 関数 DB_ID および OBJECT_ID を使ってパラメーター値を返すときには、有効な ID が返されることを常に確認してください。 存在しない場合やスペルが正しくない場合など、データベースまたはオブジェクト名が見つからない場合、両方の関数が NULL を返します。 sys.dm_db_index_operational_stats 関数では、NULL 値はすべてのデータベースまたはすべてのオブジェクトを指定するワイルドカード値として解釈されます。 これは、意図しない操作である可能性があるため、このセクションの例では、データベースおよびオブジェクト ID を確認する安全な方法を示します。

DECLARE @db_id INT;  
DECLARE @object_id INT;  
SET @db_id = DB_ID(N'AdventureWorks2022');  
SET @object_id = OBJECT_ID(N'AdventureWorks2022.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  

例: Azure Synapse Analytics、Analytics Platform System (PDW)

D. 指定したオブジェクトのオブジェクト ID を返す

次の例では、AdventureWorksPDW2022 データベース内の FactFinance テーブルのオブジェクト ID が返されます。

SELECT OBJECT_ID('AdventureWorksPDW2012.dbo.FactFinance') AS 'Object ID';  

参照

メタデータ関数 (Transact-SQL)
sys.objects (Transact-SQL)
sys.dm_db_index_operational_stats (Transact-SQL)
OBJECT_DEFINITION (Transact-SQL)
OBJECT_NAME (Transact-SQL)