Si vous utilisez T-SQL depuis un certain temps, il est probable que vous ayez rencontré le sys.objects
vue du catalogue système, qui renvoie des objets définis par l'utilisateur et étendus au schéma dans la base de données.
Mais il existe deux autres points de vue similaires dont vous pouvez ou non être conscients ; sys.system_objects
et sys.all_objects
.
Bien que similaires, leurs différences sont claires et les noms font la différence. Voici la définition officielle des trois vues :
sys.objects
- Contient une ligne pour chaque objet de portée de schéma défini par l'utilisateur qui est créé dans une base de données.
sys.system_objects
- Contient une ligne pour tous les objets système de portée de schéma qui sont inclus avec SQL Server.
sys.all_objects
- Affiche l'
UNION
de tous les objets définis par l'utilisateur et les objets système à l'échelle du schéma.
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 objets définis par l'utilisateur).
Exemple
Voici un exemple qui illustre la différence dans les résultats renvoyés par ces vues.
USE WideWorldImportersDW; SELECT COUNT(*) AS [sys.objects] FROM sys.objects; SELECT COUNT(*) AS [sys.system_objects] FROM sys.system_objects; SELECT COUNT(*) AS [sys.all_objects] FROM sys.all_objects; SELECT (SELECT COUNT(*) AS [sys.all_objects] FROM sys.all_objects) - (SELECT COUNT(*) AS [sys.system_objects] FROM sys.system_objects) AS [sys.all_objects MINUS sys.system_objects];
Résultat :
+---------------+ | sys.objects | |---------------| | 224 | +---------------+ (1 row affected) +----------------------+ | sys.system_objects | |----------------------| | 2205 | +----------------------+ (1 row affected) +-------------------+ | sys.all_objects | |-------------------| | 2429 | +-------------------+ (1 row affected)
Ces vues renvoient trop de lignes pour que je les liste ici, donc j'utilise COUNT()
pour renvoyer le nombre de lignes que chacune renvoie.
Si vous êtes bon en maths, vous verrez rapidement que le nombre de sys.all_objects
est la somme de sys.objects
et sys.system_objects
.
Voici une requête qui fait cet ajout.
SELECT (SELECT COUNT(*) AS [sys.objects] FROM sys.objects) + (SELECT COUNT(*) AS [sys.system_objects] FROM sys.system_objects) AS [sys.objects PLUS sys.system_objects];
Résultat :
+---------------------------------------+ | sys.objects PLUS sys.system_objects | |---------------------------------------| | 2429 | +---------------------------------------+
Notez que la visibilité des métadonnées dans les vues de catalogue est limitée aux éléments sécurisables qu'un utilisateur possède ou sur lesquels l'utilisateur a reçu une autorisation.