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

Différence entre sys.sql_modules, sys.system_sql_modules et sys.all_sql_modules dans SQL Server

Dans SQL Server, le sys.sql_modules , sys.system_sql_modules , et sys.all_sql_modules les vues du catalogue système renvoient des métadonnées sur les modules définis par le langage SQL dans SQL Server.

Cependant, il y a une différence entre eux.

Voici la définition officielle de chaque vue :

sys.sql_modules
Renvoie une ligne pour chaque objet qui est un module défini par le langage SQL dans SQL Server, y compris la fonction scalaire définie par l'utilisateur compilée en mode natif. Les objets de type P, RF, V, TR, FN, IF, TF et R ont un module SQL associé. Les valeurs par défaut autonomes, les objets de type D, ont également une définition de module SQL dans cette vue.
sys.system_sql_modules
Renvoie une ligne par objet système qui contient un module défini par le langage SQL. Les objets système de type FN, IF, P, PC, TF, V ont un module SQL associé.
sys.all_sql_modules
Renvoie l'union de sys.sql_modules et sys.system_sql_modules .

En d'autres termes, la dernière vue combine les résultats des deux vues précédentes (elle renvoie à la fois le système et modules définis par l'utilisateur).

Exemple

Voici un exemple qui illustre la différence dans les résultats renvoyés par ces vues.

USE Music;

SELECT COUNT(*) AS sql_modules
FROM sys.sql_modules;

SELECT COUNT(*) AS system_sql_modules
FROM sys.system_sql_modules;

SELECT COUNT(*) AS all_sql_modules
FROM sys.all_sql_modules;

Résultat :

+---------------+
| sql_modules   |
|---------------|
| 9             |
+---------------+
(1 row affected)
+----------------------+
| system_sql_modules   |
|----------------------|
| 2020                 |
+----------------------+
(1 row affected)
+-------------------+
| all_sql_modules   |
|-------------------|
| 2029              |
+-------------------+
(1 row affected)

Dans ce cas, il n'y a que 9 modules définis par l'utilisateur dans cette base de données. Le reste provient de modules système.

Si nous additionnons les résultats des deux premières requêtes ensemble, nous obtenons le même résultat que sys.all_sql_modules :

SELECT 
(SELECT COUNT(*) FROM sys.sql_modules) +
(SELECT COUNT(*) FROM sys.system_sql_modules)
AS Result;

Résultat :

+----------+
| Result   |
|----------|
| 2029     |
+----------+