En SQL Server, puede usar SCHEMA_NAME()
para devolver el nombre de un esquema particular. La forma en que funciona es que devuelve el nombre de esquema asociado con una ID de esquema.
Si no pasa un ID de esquema a la función, devuelve el nombre del esquema predeterminado de la persona que llama.
Ejemplo 1:Devolver esquema predeterminado
Aquí hay un ejemplo que devuelve el nombre del esquema predeterminado de la persona que llama.
SELECT SCHEMA_NAME() AS Result;
Resultado:
+----------+ | Result | |----------| | dbo | +----------+
Esto devuelve el nombre del esquema predeterminado de la persona que llama porque no especifiqué explícitamente otro ID de esquema.
Ejemplo 2:especificar un esquema diferente
En este ejemplo, paso un ID de esquema a la función.
SELECT SCHEMA_NAME(7) AS Result;
Resultado:
+----------+ | Result | |----------| | Fact | +----------+
Ejemplo 3:cambiar de base de datos
El ejemplo anterior se ejecutó en una base de datos que tenía un esquema con un ID de 7. Si cambio a una base de datos diferente, podría obtener un nombre de esquema diferente o ningún nombre.
Este es un ejemplo de lo que quiero decir.
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)
Cuatro columnas devuelven NULL
en la base de datos de Música, porque no hay ningún esquema con ese ID.
Ejemplo 4:resultados de consulta más legibles
Aquí hay un ejemplo del uso de SCHEMA_NAME()
para presentar el nombre del esquema en lugar de su ID al devolver resultados desde una vista del 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 | +-------------+---------------+-------------------------+
Las sys.tables
la vista del sistema devuelve el ID del esquema pero no su nombre. Sin embargo, eso no es un problema. El ID es suficiente, porque podemos usar SCHEMA_NAME()
para mostrar el nombre del esquema, según ese ID.
Si no tuviéramos el SCHEMA_NAME()
función, necesitaríamos hacer una combinación en sys.schemas
vista del sistema solo para obtener el nombre del esquema.
Ejemplo 5:en una cláusula WHERE
Aquí hay un ejemplo del uso de SCHEMA_NAME()
en un WHERE
cláusula.
USE WideWorldImportersDW; SELECT * FROM sys.schemas WHERE name = SCHEMA_NAME(7);
Resultado:
+--------+-------------+----------------+ | name | schema_id | principal_id | |--------+-------------+----------------| | Fact | 7 | 1 | +--------+-------------+----------------+
Si necesita obtener la ID de un esquema, use el SCHEMA_ID()
función.