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)