OBJECT_NAME (Transact-SQL)

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

傳回結構描述範圍物件的資料庫物件名稱。 如需結構描述範圍物件的清單,請參閱 sys.objects (Transact-SQL)

Transact-SQL 語法慣例

Syntax

OBJECT_NAME ( object_id [, database_id ] )  

注意

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

引數

object_id
這是所要使用的物件識別碼。 object_idint,而且會假設為指定資料庫或目前資料庫內容中的結構描述範圍物件。

database_id
這是查閱物件所在資料庫的識別碼。database_idint

傳回型別

sysname

例外狀況

當發生錯誤,或呼叫端沒有檢視物件的權限時,便會傳回 NULL。 如果目標資料庫將 AUTO_CLOSE 選項設為 ON,函數會開啟資料庫。

使用者只能檢視使用者擁有或被授與某些權限之安全性實體的中繼資料。 這表示發出中繼資料的內建函數 (例如,OBJECT_NAME) 會在使用者不具有該物件任何權限時傳回 NULL。 如需相關資訊,請參閱 Metadata Visibility Configuration

權限

需要物件的 ANY 權限。 若要指定資料庫識別碼,也需要資料庫的 CONNECT 權限,或必須啟用 Guest 帳戶。

備註

系統函數可以用於選取清單、WHERE 子句以及任何可以使用運算式的位置。 如需詳細資訊,請參閱運算式WHERE

這個系統函數傳回的值會使用目前資料庫的定序。

根據預設,SQL Server 資料庫引擎會假設 object_id 在目前資料庫內容中。 參考另一資料庫中之 object_id 的查詢會傳回 NULL 或不正確的結果。 例如,在下列查詢中,目前資料庫的內容是 AdventureWorks2022。 資料庫引擎會嘗試傳回該資料庫 (而不是查詢之 FROM 子句中所指定的資料庫) 中指定之物件識別碼的物件名稱。 因此,會傳回不正確的資訊。

USE AdventureWorks2022;  
GO  
SELECT DISTINCT OBJECT_NAME(object_id)  
FROM master.sys.objects;  
GO  

您可以指定資料庫識別碼,在另一個資料庫的內容中解析物件名稱。 下列範例會在 master 中指定 OBJECT_SCHEMA_NAME 資料庫的資料庫識別碼,並傳回正確的結果。

USE AdventureWorks2022;  
GO  
SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id, 1) AS schema_name  
FROM master.sys.objects;  
GO  

範例

A. 在 WHERE 子句中使用 OBJECT_NAME

下列範例會從 sys.objects 目錄檢視中,傳回 OBJECT_NAME 陳述式 WHERE 子句中的 SELECT 所指定之物件的資料行。

USE AdventureWorks2022;  
GO  
DECLARE @MyID INT;  
SET @MyID = (SELECT OBJECT_ID('AdventureWorks2022.Production.Product',  
    'U'));  
SELECT name, object_id, type_desc  
FROM sys.objects  
WHERE name = OBJECT_NAME(@MyID);  
GO  

B. 傳回物件結構描述名稱和物件名稱

下列範例會針對不是特定或準備陳述式的所有快取查詢計畫,傳回物件結構描述名稱、物件名稱和 SQL 文字。

SELECT DB_NAME(st.dbid) AS database_name,   
    OBJECT_SCHEMA_NAME(st.objectid, st.dbid) AS schema_name,  
    OBJECT_NAME(st.objectid, st.dbid) AS object_name,   
    st.text AS query_text  
FROM sys.dm_exec_query_stats AS qs  
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st  
WHERE st.objectid IS NOT NULL;  
GO  

C. 傳回三部分物件名稱

下列範例會針對所有資料庫中的所有物件,傳回資料庫、結構描述和物件名稱,以及 sys.dm_db_index_operational_stats 動態管理檢視中的所有其他資料行。

SELECT QUOTENAME(DB_NAME(database_id))   
    + N'.'   
    + QUOTENAME(OBJECT_SCHEMA_NAME(object_id, database_id))   
    + N'.'   
    + QUOTENAME(OBJECT_NAME(object_id, database_id))  
    , *   
FROM sys.dm_db_index_operational_stats(NULL, NULL, NULL, NULL);  
GO  

範例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

D. 在 WHERE 子句中使用 OBJECT_NAME

下列範例會從 sys.objects 目錄檢視中,傳回 OBJECT_NAME 陳述式 WHERE 子句中的 SELECT 所指定之物件的資料行。 (您的物件數目 (下列範例中為 274100017) 會不同。 若要測試此範例,請藉由在您的資料庫中執行 SELECT name, object_id FROM sys.objects; 來查看有效物件的數目。)

SELECT name, object_id, type_desc  
FROM sys.objects  
WHERE name = OBJECT_NAME(274100017);  

另請參閱

中繼資料函數 (Transact-SQL)
OBJECT_DEFINITION (Transact-SQL)
OBJECT_ID (Transact-SQL)