OBJECT_ID (Transact-SQL)

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

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

無法使用 來查詢 OBJECT_ID非架構範圍的物件,例如數據定義語言 (DDL) 觸發程式。 對於在 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 語法,請參閱 舊版檔

引數

N'object_name'

要使用的物件。 object_namevarcharnvarcharobject_name的 varchar 值會隱含轉換成 nvarchar。 資料庫和結構描述名稱的指定是選擇性的。

N'object_type'

架構範圍物件類型。 object_typevarcharnvarcharobject_type的 varchar 值會隱含轉換成 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)

範例

本文需要AdventureWorks2022範例資料庫,您可以從 Microsoft SQL Server Samples 和 Community Projects (Microsoft SQL Server 範例和社群專案)首頁下載。

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_IDOBJECT_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';