Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come funziona SCHEMA_ID() in SQL Server

In SQL Server puoi utilizzare SCHEMA_ID() funzione per restituire l'ID di un determinato schema. Più specificamente, questa funzione restituisce l'ID schema associato a un nome schema.

È come SCHEMA_NAME() tranne che restituisce l'ID dello schema invece del nome (e accetta il parametro name invece dell'ID).

Se non si passa un nome di schema alla funzione, restituisce l'ID dello schema predefinito del chiamante.

Esempio 1 – Restituzione dello schema predefinito

Ecco un esempio che restituisce l'ID dello schema predefinito del chiamante.

SELECT SCHEMA_ID() AS Result;

Risultato:

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

Questo restituisce l'ID dello schema predefinito del chiamante perché non ho specificato esplicitamente nessun altro nome di schema.

Eccolo di nuovo, insieme al nome dello schema.

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

Risultato:

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

Esempio 2:specificare uno schema diverso

In questo esempio passo esplicitamente un nome di schema alla funzione.

SELECT SCHEMA_ID('Dimension') AS Result;

Risultato:

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

Questo mi dice che lo schema chiamato Dimension ha un ID di 6.

Esempio 3:cambio di database

L'esempio precedente era appena stato eseguito in un database che aveva uno schema chiamato Dimension. Se passo a un database diverso, potrei ottenere un ID schema diverso o nessun ID.

Ecco un esempio di cosa intendo.

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

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

Risultato:

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

Il secondo risultato restituisce NULL perché non esiste uno schema chiamato Dimension nel database di Music.

Esempio 4 – In una clausola WHERE

Usando SCHEMA_ID() in un WHERE La clausola può essere un modo pratico per filtrare i risultati in base allo schema.

In SQL Server, varie viste di sistema utilizzano un schema_id colonna per memorizzare l'ID dello schema ma non il nome dello schema. Pertanto è necessario conoscere l'ID dello schema se si intende filtrare i risultati in base allo schema. Ecco dove SCHEMA_ID() può essere molto utile. Ti evita di dover fare un join su sys.schemas visualizza solo per calcolare il nome dello schema.

Ecco un esempio di utilizzo di SCHEMA_ID() in un WHERE clausola.

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

Risultato:

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)