OBJECT_ID (Transact-SQL)

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

重要注意事項重要事項

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

主題連結圖示Transact-SQL 語法慣例

語法

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

下列範例會傳回 AdventureWorks 資料庫之 Production.WorkOrder 資料表的物件識別碼。

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

B. 確認物件存在

下列範例會確認資料表有物件識別碼,來檢查指定的資料表是否存在。如果資料表存在,就會刪除它。 如果資料表不存在,就不會執行 DROP TABLE 陳述式。

USE AdventureWorks;
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 函數,來傳回 AdventureWorks 資料庫中 Person.Address 資料表之所有索引和資料分割的資訊。

重要注意事項重要事項

當您使用 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'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