OBJECT_ID (Transact-SQL)
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)
傳回結構描述範圍的物件之資料庫物件識別碼。
無法使用 來查詢 OBJECT_ID
非架構範圍的物件,例如數據定義語言 (DDL) 觸發程式。 對於在 sys.objects 目錄檢視中找不到的物件,請查詢適當的目錄檢視來取得對象識別碼。 例如,若要傳回 DDL 觸發程序的物件識別碼,請使用 SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog'
。
語法
OBJECT_ID ( ' [ database_name . [ schema_name ] . | schema_name . ]
object_name' [ , 'object_type' ] )
引數
N'object_name'
要使用的物件。 object_name 是 varchar 或 nvarchar。 object_name的 varchar 值會隱含轉換成 nvarchar。 資料庫和結構描述名稱的指定是選擇性的。
N'object_type'
架構範圍物件類型。 object_type 是 varchar 或 nvarchar。 object_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)。
範例
本文 Transact-SQL 程式碼範例使用 AdventureWorks2022
或 AdventureWorksDW2022
範例資料庫,從 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_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';