OBJECT_ID (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

傳回結構描述範圍的物件之資料庫物件識別碼。

重要

範圍不是結構描述的物件 (例如 DDL 觸發程序) 無法利用 OBJECT_ID 進行查詢。 如果是在 sys.objects 目錄檢視中找不到的物件,請查詢適當的目錄檢視來取得物件識別碼。 例如,若要傳回 DDL 觸發程序的物件識別碼,請使用 SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog``'

Transact-SQL 語法慣例

Syntax

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

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

'object_name'
這是要使用的物件。 object_namevarcharnvarchar。 如果 object_namevarchar,則會隱含地轉換成 nvarchar。 資料庫和結構描述名稱的指定是選擇性的。

'object_type'
這是結構描述範圍物件類型。 object_typevarcharnvarchar。 如果 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. 傳回指定物件的物件識別碼

下列範例會傳 Production.WorkOrder 回 AdventureWorks2022 資料庫中數據表的物件標識碼。

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

B. 確認物件存在

下列範例會確認資料表有物件識別碼,來檢查指定的資料表是否存在。 如果資料表存在,就會刪除它。 如果資料表不存在,就不會執行 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的資訊。

注意

Azure Synapse Analytics 的無伺服器 SQL 集區不支援此語法。

重要

當您使用 Transact-SQL 函數 DB_ID 和 OBJECT_ID 來傳回參數值時,請務必確定所傳回的是有效的識別碼。 如果找不到資料庫或物件名稱 (例如,因為不存在或是拼錯了),這兩個函數都會傳回 NULL。 sys.dm_db_index_operational_stats 函數會將 NULL 解譯為指定所有資料庫或物件的萬用字元值。 由於這不見得是刻意安排的作業,因此本節所舉的範例,只會示範決定資料庫和物件識別碼的安全方法。

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:傳回指定物件的物件識別碼

下列範例會傳回 AdventureWorksPDW2022 資料庫中 FactFinance 資料表的物件識別碼。

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)