In SQL Server puoi utilizzare SCHEMA_NAME()
funzione per restituire il nome di uno schema particolare. Il modo in cui funziona è che restituisce il nome dello schema associato a un ID schema.
Se non si passa un ID schema alla funzione, restituisce il nome dello schema predefinito del chiamante.
Esempio 1 – Restituzione dello schema predefinito
Ecco un esempio che restituisce il nome dello schema predefinito del chiamante.
SELECT SCHEMA_NAME() AS Result;
Risultato:
+----------+ | Result | |----------| | dbo | +----------+
Questo restituisce il nome dello schema predefinito del chiamante perché non ho specificato esplicitamente un altro ID schema.
Esempio 2:specificare uno schema diverso
In questo esempio passo un ID schema alla funzione.
SELECT SCHEMA_NAME(7) AS Result;
Risultato:
+----------+ | Result | |----------| | Fact | +----------+
Esempio 3:cambio di database
L'esempio precedente è appena stato eseguito in un database che aveva uno schema con un ID 7. Se passo a un database diverso, potrei ottenere un nome schema diverso o nessun nome.
Ecco un esempio di cosa intendo.
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];
Risultato:
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)
Quattro colonne restituiscono NULL
nel database Music, perché non esiste uno schema con quell'ID.
Esempio 4:risultati di query più leggibili
Ecco un esempio di utilizzo di SCHEMA_NAME()
per presentare il nome dello schema invece del suo ID quando si restituiscono i risultati da una vista di sistema.
SELECT schema_id, SCHEMA_NAME(schema_id) AS [Schema Name], name AS [Table Name] FROM sys.tables;
Risultato:
+-------------+---------------+-------------------------+ | 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 | +-------------+---------------+-------------------------+
Le sys.tables
la vista di sistema restituisce l'ID dello schema ma non il suo nome. Questo non è un problema però. L'ID è sufficiente, perché possiamo usare SCHEMA_NAME()
per visualizzare il nome dello schema, in base a tale ID.
Se non avessimo il SCHEMA_NAME()
funzione, dovremmo fare un join su sys.schemas
vista di sistema solo per ottenere il nome dello schema.
Esempio 5 – In una clausola WHERE
Ecco un esempio di utilizzo di SCHEMA_NAME()
in un WHERE
clausola.
USE WideWorldImportersDW; SELECT * FROM sys.schemas WHERE name = SCHEMA_NAME(7);
Risultato:
+--------+-------------+----------------+ | name | schema_id | principal_id | |--------+-------------+----------------| | Fact | 7 | 1 | +--------+-------------+----------------+
Se devi ottenere l'ID di uno schema, usa SCHEMA_ID()
funzione.