Voici un article qui présente trois façons de déterminer rapidement le nombre de tables système dans la base de données actuelle dans SQL Server.
Les trois options utilisent le COUNT()
fonction lors de l'interrogation de sys.objects
vue du catalogue système. Ils aboutissent tous au même résultat, vous n'avez donc vraiment pas besoin de dépasser la première option. Mais je vais quand même les énumérer.
Option 1 – Par type
La façon la plus concise de le faire est de filtrer par le type
colonne.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Résultat :
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Ici, je filtre par un type
de S
. Le S
signifie "Table de base du système".
Si je passe au maître base de données, j'obtiens un résultat différent :
USE Master; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Résultat :
+---------------------------+ | Number of System Tables | |---------------------------| | 79 | +---------------------------+
C'est parce que le maître La base de données contient des tables système qui ne se trouvent pas dans d'autres bases de données.
Nous pouvons exécuter la requête suivante pour obtenir les noms :
USE master; SELECT name FROM sys.objects WHERE type = 'S' AND name NOT IN ( SELECT name FROM model.sys.objects WHERE type = 'S' );
Résultat :
+--------------------------+ | name | |--------------------------| | sysextendedrecoveryforks | | syslogshippers | | sysmatrixageforget | | sysmatrixages | | sysmatrixbricks | | sysmatrixconfig | | sysmatrixmanagers | +--------------------------+
Dans ce cas, je compare le maître base de données au modèle base de données. Vous pouvez explicitement spécifier une base de données différente en échangeant model
avec le nom de l'autre base de données.
Option 2 - Par "Description du type"
Une autre option consiste à filtrer par le type_desc
colonne au lieu du type
colonne.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type_desc = 'SYSTEM_TABLE';
Résultat :
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Option 3 - Par OBJECTPROPERTY()
Si pour une raison quelconque vous trouvez que les deux options précédentes ne conviennent pas, vous pouvez essayer d'utiliser le OBJECTPROPERTY()
une fonction.
Cette fonction accepte deux arguments :un ID d'objet et une propriété. L'ID d'objet peut être l'ID de table et la propriété peut être IsSystemTable
, qui détermine si l'objet est ou non une table système.
Par conséquent, vous pourriez faire quelque chose comme ceci :
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE OBJECTPROPERTY(object_id, 'IsSystemTable') = 1;
Résultat :
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Liste des tableaux
Vous pouvez modifier les trois options si vous souhaitez répertorier les tables au lieu de simplement les compter. Pour cela, il suffit de remplacer le COUNT(*) AS [Number of User Tables]
avec *
. Vous pouvez également nommer explicitement les colonnes que vous souhaitez renvoyer.
Compter les tables définies par l'utilisateur
Si vous avez besoin de connaître le numéro d'utilisateur tables, consultez 5 façons de compter le nombre de tables définies par l'utilisateur dans SQL Server.