OBJECT_NAME (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsEndpoint analityki SQL w Microsoft FabricMagazyn w Microsoft FabricBaza danych SQL w Microsoft Fabric

Zwraca nazwę obiektu bazy danych dla obiektów o zakresie schematu. Aby uzyskać listę obiektów o zakresie schematu, zobacz sys.objects (Transact-SQL).

Transact-SQL konwencje składni

Składnia

OBJECT_NAME ( object_id [, database_id ] )  

Argumenty (w programowaniu)

object_id

Identyfikator obiektu do użycia. object_id jest int i zakłada się, że jest obiektem o zakresie schematu w określonej bazie danych lub w bieżącym kontekście bazy danych.

database_id

Identyfikator bazy danych, w której ma być wyszukany obiekt. database_id jest int.

Typy zwracane

sysname

Wyjątki

Zwraca wartość NULL w przypadku błędu lub jeśli obiekt wywołujący nie ma uprawnień do wyświetlania obiektu. Jeśli docelowa baza danych ma opcję AUTO_CLOSE ustawioną na WŁ., funkcja otworzy bazę danych.

Użytkownik może wyświetlać tylko metadane zabezpieczanych, które użytkownik jest właścicielem lub którym użytkownik udzielił uprawnień. Oznacza to, że wbudowane funkcje emitujące metadane, takie jak OBJECT_NAME, mogą zwracać wartość NULL, jeśli użytkownik nie ma żadnych uprawnień do obiektu. Aby uzyskać więcej informacji, zobacz Konfiguracja widoczności metadanych.

Uprawnienia

Wymaga uprawnień ANY w obiekcie. Aby określić identyfikator bazy danych, wymagane jest również uprawnienie CONNECT do bazy danych lub konto gościa musi być włączone.

Uwagi

Funkcje systemowe mogą być używane na liście wyboru, w klauzuli WHERE i w dowolnym miejscu, w którym dozwolone jest wyrażenie. Aby uzyskać więcej informacji, zobacz Wyrażenia i GDZIE.

Wartość zwrócona przez tę funkcję systemową używa sortowania bieżącej bazy danych.

Domyślnie aparat bazy danych programu SQL Server zakłada, że object_id znajduje się w kontekście bieżącej bazy danych. W SQL Server lub Azure SQL Managed Instance zapytanie odnoszące się do object_id w innej bazie danych zwraca NULL lub błędne wyniki. Na przykład w poniższym zapytaniu kontekst aktualnej bazy danych to AdventureWorks2025. Aparat bazy danych próbuje zwrócić nazwę obiektu dla określonego identyfikatora obiektu w tej bazie danych zamiast bazy danych określonej w klauzuli FROM zapytania. W związku z tym zwracane są nieprawidłowe informacje.

Note

W Azure SQL Database oraz bazie danych SQL w Microsoft Fabric zapytania międzybazowe nie są dostępne.

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

Nazwy obiektów można rozpoznać w kontekście innej bazy danych, określając identyfikator bazy danych. Poniższy przykład określa identyfikator bazy danych dla innej bazy użytkowników, AdventureWorksDW2022, z funkcją OBJECT_SCHEMA_NAME i zwraca poprawne wyniki.

USE AdventureWorks2022;  
GO  
SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id, DB_ID(N'AdventureWorksDW2022')) AS schema_name
FROM AdventureWorksDW2022.sys.objects;  
GO  

Przykłady

Odp. Używanie OBJECT_NAME w klauzuli WHERE

Poniższy przykład zwraca kolumny z sys.objects widoku wykazu dla obiektu określonego przez OBJECT_NAME w WHERE klauzuli instrukcji SELECT .

Note

W Azure SQL Database oraz w bazie SQL w Microsoft Fabric oświadczenie nie USE jest dostępne. Zamiast tego połącz się bezpośrednio z docelową bazą danych i uruchom resztę próbki kodu.

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. Zwracanie nazwy schematu obiektu i nazwy obiektu

Poniższy przykład zwraca nazwę schematu obiektu, nazwę obiektu i tekst SQL dla wszystkich buforowanych planów zapytań, które nie są instrukcjami ad hoc ani przygotowanymi.

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. Zwracanie nazw obiektów trójczęściowych

Poniższy przykład zwraca nazwę bazy danych, schematu i obiektu wraz ze wszystkimi innymi kolumnami w sys.dm_db_index_operational_stats dynamicznym widoku zarządzania dla wszystkich obiektów we wszystkich bazach danych.

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  

Przykłady: Azure Synapse Analytics

D. Używanie OBJECT_NAME w klauzuli WHERE

Poniższy przykład zwraca kolumny z sys.objects widoku wykazu dla obiektu określonego przez OBJECT_NAME w WHERE klauzuli instrukcji SELECT . (Numer obiektu (274100017 w poniższym przykładzie) będzie inny. Aby przetestować ten przykład, wyszukaj prawidłowy numer obiektu, wykonując polecenie SELECT name, object_id FROM sys.objects; w bazie danych).

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