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

Cómo funciona SCHEMA_ID() en SQL Server

En SQL Server, puede usar el SCHEMA_ID() función para devolver el ID de un esquema determinado. Más específicamente, esta función devuelve el ID de esquema asociado con un nombre de esquema.

Es como SCHEMA_NAME() excepto que devuelve el ID del esquema en lugar del nombre (y acepta el parámetro de nombre en lugar de ID).

Si no pasa un nombre de esquema a la función, devuelve el ID del esquema predeterminado de la persona que llama.

Ejemplo 1:Devolver esquema predeterminado

Aquí hay un ejemplo que devuelve el ID del esquema predeterminado de la persona que llama.

SELECT SCHEMA_ID() AS Result;

Resultado:

+----------+
| Result   |
|----------|
| 1        |
+----------+

Esto devuelve el ID del esquema predeterminado de la persona que llama porque no especifiqué explícitamente ningún otro nombre de esquema.

Aquí está de nuevo, junto con el nombre del esquema.

SELECT 
  SCHEMA_ID() AS [Schema ID],
  SCHEMA_NAME() AS [Schema Name];

Resultado:

+-------------+---------------+
| Schema ID   | Schema Name   |
|-------------+---------------|
| 1           | dbo           |
+-------------+---------------+

Ejemplo 2:especificar un esquema diferente

En este ejemplo, paso explícitamente un nombre de esquema a la función.

SELECT SCHEMA_ID('Dimension') AS Result;

Resultado:

+----------+
| Result   |
|----------|
| 6        |
+----------+

Esto me dice que el esquema llamado Dimensión tiene una ID de 6.

Ejemplo 3:cambiar de base de datos

El ejemplo anterior se ejecutó en una base de datos que tenía un esquema llamado Dimensión. Si cambio a una base de datos diferente, es posible que obtenga una identificación de esquema diferente o ninguna identificación.

Este es un ejemplo de lo que quiero decir.

USE WideWorldImportersDW;
SELECT SCHEMA_ID('Dimension') AS Result;

USE Music;
SELECT SCHEMA_ID('Dimension') AS Result;

Resultado:

Changed database context to 'WideWorldImportersDW'.
+----------+
| Result   |
|----------|
| 6        |
+----------+
(1 row affected)
Changed database context to 'Music'.
+----------+
| Result   |
|----------|
| NULL     |
+----------+
(1 row affected)

El segundo resultado devuelve NULL porque no hay un esquema llamado Dimensión en la base de datos de Música.

Ejemplo 4:en una cláusula WHERE

Usando SCHEMA_ID() en un WHERE La cláusula puede ser una forma práctica de filtrar los resultados por esquema.

En SQL Server, varias vistas del sistema usan un schema_id columna para almacenar el ID del esquema pero no el nombre del esquema. Por lo tanto, necesita saber el ID del esquema si va a filtrar los resultados por esquema. Ahí es donde SCHEMA_ID() puede ser muy útil. Le evita tener que hacer una combinación en sys.schemas ver solo para calcular el nombre del esquema.

Aquí hay un ejemplo del uso de SCHEMA_ID() en un WHERE cláusula.

USE WideWorldImportersDW;
SELECT 
  name,
  type_desc 
FROM sys.objects
WHERE schema_id = SCHEMA_ID('Dimension');

Resultado:

Changed database context to 'WideWorldImportersDW'.
+----------------------------------------------------+------------------------+
| name                                               | type_desc              |
|----------------------------------------------------+------------------------|
| City                                               | USER_TABLE             |
| PK_Dimension_City                                  | PRIMARY_KEY_CONSTRAINT |
| DF_Dimension_City_City_Key                         | DEFAULT_CONSTRAINT     |
| Customer                                           | USER_TABLE             |
| PK_Dimension_Customer                              | PRIMARY_KEY_CONSTRAINT |
| DF_Dimension_Customer_Customer_Key                 | DEFAULT_CONSTRAINT     |
| Date                                               | USER_TABLE             |
| PK_Dimension_Date                                  | PRIMARY_KEY_CONSTRAINT |
| Employee                                           | USER_TABLE             |
| PK_Dimension_Employee                              | PRIMARY_KEY_CONSTRAINT |
| DF_Dimension_Employee_Employee_Key                 | DEFAULT_CONSTRAINT     |
| Payment Method                                     | USER_TABLE             |
| PK_Dimension_Payment_Method                        | PRIMARY_KEY_CONSTRAINT |
| DF_Dimension_Payment_Method_Payment_Method_Key     | DEFAULT_CONSTRAINT     |
| Stock Item                                         | USER_TABLE             |
| PK_Dimension_Stock_Item                            | PRIMARY_KEY_CONSTRAINT |
| DF_Dimension_Stock_Item_Stock_Item_Key             | DEFAULT_CONSTRAINT     |
| Supplier                                           | USER_TABLE             |
| PK_Dimension_Supplier                              | PRIMARY_KEY_CONSTRAINT |
| DF_Dimension_Supplier_Supplier_Key                 | DEFAULT_CONSTRAINT     |
| Transaction Type                                   | USER_TABLE             |
| PK_Dimension_Transaction_Type                      | PRIMARY_KEY_CONSTRAINT |
| DF_Dimension_Transaction_Type_Transaction_Type_Key | DEFAULT_CONSTRAINT     |
+----------------------------------------------------+------------------------+
(23 rows affected)