No SQL Server, você pode usar o
SCHEMA_NAME()
função para retornar o nome de um esquema específico. A maneira como funciona é que ele retorna o nome do esquema associado a um ID do esquema. Se você não passar um ID de esquema para a função, ela retornará o nome do esquema padrão do chamador.
Exemplo 1 - Esquema padrão de retorno
Aqui está um exemplo que retorna o nome do esquema padrão do chamador.
SELECT SCHEMA_NAME() AS Result;
Resultado:
+----------+ | Result | |----------| | dbo | +----------+
Isso retorna o nome do esquema padrão do chamador porque não especifiquei explicitamente outro ID de esquema.
Exemplo 2 – Especifique um esquema diferente
Neste exemplo, passo um ID de esquema para a função.
SELECT SCHEMA_NAME(7) AS Result;
Resultado:
+----------+ | Result | |----------| | Fact | +----------+
Exemplo 3 – Trocando Bancos de Dados
O exemplo anterior foi executado em um banco de dados que tinha um esquema com um ID de 7. Se eu mudar para um banco de dados diferente, posso obter um nome de esquema diferente ou nenhum nome.
Aqui está um exemplo do que quero dizer.
USE WideWorldImportersDW; SELECT SCHEMA_NAME(1) AS [1], SCHEMA_NAME(2) AS [2], SCHEMA_NAME(3) AS [3], SCHEMA_NAME(4) AS [4], SCHEMA_NAME(5) AS [5], SCHEMA_NAME(6) AS [6], SCHEMA_NAME(7) AS [7], SCHEMA_NAME(8) AS [8]; USE Music; SELECT SCHEMA_NAME(1) AS [1], SCHEMA_NAME(2) AS [2], SCHEMA_NAME(3) AS [3], SCHEMA_NAME(4) AS [4], SCHEMA_NAME(5) AS [5], SCHEMA_NAME(6) AS [6], SCHEMA_NAME(7) AS [7], SCHEMA_NAME(8) AS [8];
Resultado:
Changed database context to 'WideWorldImportersDW'. +-----+-------+--------------------+-----+-------------+-----------+------+-------------+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |-----+-------+--------------------+-----+-------------+-----------+------+-------------| | dbo | guest | INFORMATION_SCHEMA | sys | Application | Dimension | Fact | Integration | +-----+-------+--------------------+-----+-------------+-----------+------+-------------+ (1 row affected) Changed database context to 'Music'. +-----+-------+--------------------+-----+------+------+------+------+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |-----+-------+--------------------+-----+------+------+------+------| | dbo | guest | INFORMATION_SCHEMA | sys | NULL | NULL | NULL | NULL | +-----+-------+--------------------+-----+------+------+------+------+ (1 row affected)
Quatro colunas retornam
NULL
no banco de dados Music, porque não há esquema com esse ID. Exemplo 4 – Resultados de consulta mais legíveis
Aqui está um exemplo de uso de
SCHEMA_NAME()
para apresentar o nome do esquema em vez de seu ID ao retornar resultados de uma visualização do sistema. SELECT schema_id, SCHEMA_NAME(schema_id) AS [Schema Name], name AS [Table Name] FROM sys.tables;
Resultado:
+-------------+---------------+-------------------------+ | schema_id | Schema Name | Table Name | |-------------+---------------+-------------------------| | 8 | Integration | ETL Cutoff | | 8 | Integration | Lineage | | 8 | Integration | Customer_Staging | | 8 | Integration | Employee_Staging | | 8 | Integration | Movement_Staging | | 8 | Integration | Order_Staging | | 8 | Integration | PaymentMethod_Staging | | 6 | Dimension | City | | 8 | Integration | Purchase_Staging | | 6 | Dimension | Customer | | 8 | Integration | Sale_Staging | | 8 | Integration | StockHolding_Staging | | 6 | Dimension | Date | | 8 | Integration | StockItem_Staging | | 6 | Dimension | Employee | | 8 | Integration | Supplier_Staging | | 6 | Dimension | Payment Method | | 8 | Integration | Transaction_Staging | | 8 | Integration | TransactionType_Staging | | 6 | Dimension | Stock Item | | 6 | Dimension | Supplier | | 6 | Dimension | Transaction Type | | 7 | Fact | Movement | | 7 | Fact | Order | | 7 | Fact | Purchase | | 7 | Fact | Sale | | 7 | Fact | Stock Holding | | 7 | Fact | Transaction | | 8 | Integration | City_Staging | +-------------+---------------+-------------------------+
O
sys.tables
a visualização do sistema retorna o ID do esquema, mas não seu nome. Isso não é um problema embora. O ID é suficiente, pois podemos usar SCHEMA_NAME()
para exibir o nome do esquema, com base nesse ID. Se não tivéssemos o
SCHEMA_NAME()
função, precisaríamos fazer uma junção no sys.schemas
visão do sistema apenas para obter o nome do esquema. Exemplo 5 - Em uma cláusula WHERE
Aqui está um exemplo de uso de
SCHEMA_NAME()
em um WHERE
cláusula. USE WideWorldImportersDW; SELECT * FROM sys.schemas WHERE name = SCHEMA_NAME(7);
Resultado:
+--------+-------------+----------------+ | name | schema_id | principal_id | |--------+-------------+----------------| | Fact | 7 | 1 | +--------+-------------+----------------+
Se você precisar obter o ID de um esquema, use o
SCHEMA_ID()
função.