Compartilhar via


OBJECT_SCHEMA_NAME (Transact-SQL)

Retorna o nome de esquema de banco de dados para objetos no escopo do esquema. Para uma lista de objetos do escopo do esquema, consulte sys.objects (Transact-SQL).

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

OBJECT_SCHEMA_NAME ( object_id [, database_id ] )

Argumentos

  • object_id
    É o ID do objeto a ser usado. object_id é int e é considerado como um objeto no escopo do esquema no banco de dados especificado ou no contexto de banco de dados atual.

  • database_id
    É a identificação do banco de dados onde o objeto será pesquisado. database_id é int.

Tipos de retorno

sysname

Exceções

Retorna NULL no caso de erro ou se um chamador não tiver permissão para exibir o objeto. Se o banco de dados de destino tiver a opção AUTO_CLOSE definida como ON, a função abrirá o banco de dados.

Um usuário só pode exibir os metadados de itens protegidos de sua propriedade ou para os quais ele recebeu permissão. Isso significa que as funções internas emissoras de metadados, como OBJECT_DEFINITIONSCHEMA_NAME, podem retornar NULL se o usuário não tiver permissão no objeto. Para obter mais informações, consulte Configuração de visibilidade de metadados e Solucionando problemas de visibilidade de metadados.

Permissões

Requer permissão ANY para o objeto. Para especificar uma identificação de banco de dados, é exigida também a permissão CONNECT para o banco de dados ou a conta de convidado deve ser habilitada.

Comentários

As funções do sistema podem ser usadas na lista de seleção, na cláusula WHERE, e em qualquer local onde uma expressão for permitida. Para obter mais informações, consulte Expressões e WHERE.

O conjunto de resultados retornado por esta função de sistema usa o agrupamento do banco de dados atual.

Se database_id não for especificado, o Mecanismo de banco de dados do SQL Server entenderá que object_id está no contexto do banco de dados atual. Uma consulta que faz referência a um object_id em outro banco de dados retorna NULL ou resultados incorretos. Por exemplo, na consulta a seguir o contexto do banco de dados atual é AdventureWorks2008R2. O Mecanismo de Banco de Dados tenta retornar um nome de esquema de objeto para a identificação do objeto especificado naquele banco de dados, em lugar do banco de dados especificado na cláusula FROM da consulta. Assim, são retornadas informações incorretas.

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

O exemplo a seguir especifica a identificação de banco de dados para o banco de dados master, na função OBJECT_SCHEMA_NAME e retorna os resultados corretos.

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

Exemplos

A. Retornando o nome de esquema de objeto e o nome de objeto

O exemplo seguinte retorna o nome de esquema de objeto, nome de objeto e texto de SQL para todos os planos de consulta armazenadas em cache que não sejam instruções ad hoc ou preparadas.

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. Retornando nomes de objeto de três partes

O exemplo a seguir retorna o banco de dados, esquema e nome de objeto juntamente com todas as outras colunas na exibição de gerenciamento dinâmico sys.dm_db_index_operational_stats de todos os objetos em todos os bancos de dados.

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