Dans SQL Server, vous pouvez utiliser le SCHEMA_NAME()
fonction pour renvoyer le nom d'un schéma particulier. La façon dont cela fonctionne est qu'il renvoie le nom de schéma associé à un ID de schéma.
Si vous ne transmettez pas d'ID de schéma à la fonction, elle renvoie le nom du schéma par défaut de l'appelant.
Exemple 1 – Retourner le schéma par défaut
Voici un exemple qui renvoie le nom du schéma par défaut de l'appelant.
SELECT SCHEMA_NAME() AS Result;
Résultat :
+----------+ | Result | |----------| | dbo | +----------+
Cela renvoie le nom du schéma par défaut de l'appelant car je n'ai pas explicitement spécifié un autre ID de schéma.
Exemple 2 – Spécifier un schéma différent
Dans cet exemple, je transmets un ID de schéma à la fonction.
SELECT SCHEMA_NAME(7) AS Result;
Résultat :
+----------+ | Result | |----------| | Fact | +----------+
Exemple 3 – Changer de base de données
Il se trouve que l'exemple précédent a été exécuté dans une base de données qui avait un schéma avec un ID de 7. Si je passe à une autre base de données, je pourrais obtenir un nom de schéma différent, ou pas de nom du tout.
Voici un exemple de ce que je veux dire.
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];
Résultat :
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)
Quatre colonnes renvoient NULL
dans la base de données Musique, car il n'y a pas de schéma avec cet ID.
Exemple 4 - Résultats de requête plus lisibles
Voici un exemple d'utilisation de SCHEMA_NAME()
pour présenter le nom du schéma au lieu de son ID lors du retour des résultats d'une vue système.
SELECT schema_id, SCHEMA_NAME(schema_id) AS [Schema Name], name AS [Table Name] FROM sys.tables;
Résultat :
+-------------+---------------+-------------------------+ | 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 | +-------------+---------------+-------------------------+
Les sys.tables
La vue système renvoie l'ID du schéma mais pas son nom. Ce n'est pas un problème cependant. L'ID est suffisant, car nous pouvons utiliser SCHEMA_NAME()
pour afficher le nom du schéma, basé sur cet ID.
Si nous n'avions pas le SCHEMA_NAME()
fonction, nous aurions besoin de faire une jointure sur le sys.schemas
vue système juste pour obtenir le nom du schéma.
Exemple 5 – Dans une clause WHERE
Voici un exemple d'utilisation de SCHEMA_NAME()
dans un WHERE
clause.
USE WideWorldImportersDW; SELECT * FROM sys.schemas WHERE name = SCHEMA_NAME(7);
Résultat :
+--------+-------------+----------------+ | name | schema_id | principal_id | |--------+-------------+----------------| | Fact | 7 | 1 | +--------+-------------+----------------+
Si vous avez besoin d'obtenir l'ID d'un schéma, utilisez le SCHEMA_ID()
une fonction.