OBJECT_SCHEMA_NAME (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics

返回架构范围内的对象的数据库架构名称。 有关架构范围内的对象的列表,请参阅 sys.objects (Transact-SQL)

注意

OBJECT_SCHEMA_NAME 函数仅在 Azure Synapse Analytics 专用 SQL 池中受支持。

Transact-SQL 语法约定

语法

OBJECT_SCHEMA_NAME ( object_id [, database_id ] )  

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

自变量

object_id

要使用的对象的 ID。 object_id 的数据类型为 int,并假定为指定数据库或当前数据库上下文中的架构范围内的对象

database_id

要在其中查找对象的数据库的 ID。database_id 为 int。

返回类型

sysname

例外

出现错误时或调用方没有查看对象的权限时,将返回 NULL。 如果目标数据库的 AUTO_CLOSE 选项设置为 ON,则此函数会打开数据库。

用户只能查看符合如下条件的安全对象的元数据:该安全对象为该用户所有,或已授予该用户对该安全对象的权限。 如果用户对该对象没有任何权限,则那些会生成元数据的内置函数(如 OBJECT_SCHEMA_NAME)可能返回 NULL。 有关详细信息,请参阅 Metadata Visibility Configuration

权限

需要对对象拥有 ANY 权限。 若要指定数据库 ID,还需要对数据库拥有 CONNECT 权限,或者必须启用 guest 帐户。

备注

系统函数可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用。 有关详细信息,请参阅表达式WHERE

由此系统函数返回的结果集将使用当前数据库的排序规则。

如果未指定 database_id,则 SQL Server 数据库引擎 假定 object_id 在当前数据库上下文中object_id。 在其他数据库中引用 object_id 的查询将返回 NULL 或不正确的结果。 例如,以下查询中当前数据库的上下文是 AdventureWorks2022。 数据库引擎尝试返回在当前数据库(而非查询的 FROM 子句中指定的数据库)中指定的 object_id 的对象架构名称。 因此,会返回不正确的信息。

SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id)  
FROM master.sys.objects;  

以下示例在 master 函数中指定 OBJECT_SCHEMA_NAME 数据库的数据库 ID,并返回正确的结果。

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

示例

A. 返回对象架构名称和对象名称

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

以下示例返回所有缓存查询计划(为非临时语句或预定义语句)的对象架构名称、对象名称和 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_statement  
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  

B. 返回由三部分组成的对象名称

以下示例返回当前数据库上下文中所有对象的数据库、架构和对象名称。

SELECT QUOTENAME(DB_NAME(db_id()))   
    + N'.'   
    + QUOTENAME(OBJECT_SCHEMA_NAME(object_id, db_id()))   
    + N'.'   
    + QUOTENAME(OBJECT_NAME(object_id, db_id()))  
    , *   
FROM sys.objects;
GO  

以下示例返回所有数据库中所有对象的数据库名称、架构名称和对象名称,同时返回 sys.dm_db_index_operational_stats 动态管理视图中的其他所有列。

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

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  

后续步骤