Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fonctionnement de SCHEMA_ID() dans SQL Server

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)