Dans SQL Server, vous pouvez utiliser le SCHEMA_ID()
fonction pour renvoyer l'ID d'un schéma donné. Plus précisément, cette fonction renvoie l'ID de schéma associé à un nom de schéma.
C'est comme SCHEMA_NAME()
sauf qu'il renvoie l'ID du schéma au lieu du nom (et qu'il accepte le paramètre name au lieu de l'ID).
Si vous ne transmettez pas de nom de schéma à la fonction, elle renvoie l'ID du schéma par défaut de l'appelant.
Exemple 1 – Retourner le schéma par défaut
Voici un exemple qui renvoie l'ID du schéma par défaut de l'appelant.
SELECT SCHEMA_ID() AS Result;
Résultat :
+----------+ | Result | |----------| | 1 | +----------+
Cela renvoie l'ID du schéma par défaut de l'appelant car je n'ai pas explicitement spécifié d'autre nom de schéma.
Le voici à nouveau, avec le nom du schéma.
SELECT SCHEMA_ID() AS [Schema ID], SCHEMA_NAME() AS [Schema Name];
Résultat :
+-------------+---------------+ | Schema ID | Schema Name | |-------------+---------------| | 1 | dbo | +-------------+---------------+
Exemple 2 – Spécifier un schéma différent
Dans cet exemple, je passe explicitement un nom de schéma à la fonction.
SELECT SCHEMA_ID('Dimension') AS Result;
Résultat :
+----------+ | Result | |----------| | 6 | +----------+
Cela me dit que le schéma appelé Dimension a un ID de 6.
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 appelé Dimension. Si je passe à une autre base de données, je peux obtenir un ID de schéma différent, voire aucun ID.
Voici un exemple de ce que je veux dire.
USE WideWorldImportersDW; SELECT SCHEMA_ID('Dimension') AS Result; USE Music; SELECT SCHEMA_ID('Dimension') AS Result;
Résultat :
Changed database context to 'WideWorldImportersDW'. +----------+ | Result | |----------| | 6 | +----------+ (1 row affected) Changed database context to 'Music'. +----------+ | Result | |----------| | NULL | +----------+ (1 row affected)
Le deuxième résultat renvoie NULL
car il n'y a pas de schéma appelé Dimension dans la base de données Music.
Exemple 4 – Dans une clause WHERE
Utilisation de SCHEMA_ID()
dans un WHERE
La clause peut être un moyen pratique de filtrer les résultats par schéma.
Dans SQL Server, diverses vues système utilisent un schema_id
pour stocker l'ID de schéma mais pas le nom du schéma. Par conséquent, vous devez connaître l'ID de schéma si vous souhaitez filtrer les résultats par schéma. C'est là que SCHEMA_ID()
peut être très utile. Cela vous évite d'avoir à faire une jointure sur le sys.schemas
view juste pour trouver le nom du schéma.
Voici un exemple d'utilisation de SCHEMA_ID()
dans un WHERE
clause.
USE WideWorldImportersDW; SELECT name, type_desc FROM sys.objects WHERE schema_id = SCHEMA_ID('Dimension');
Résultat :
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)