sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo funciona SCHEMA_NAME() en SQL Server

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.