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

5 façons de compter le nombre de tables définies par l'utilisateur dans une base de données SQL Server

Vous trouverez ci-dessous cinq méthodes que vous pouvez utiliser pour déterminer rapidement le nombre de tables définies par l'utilisateur dans la base de données actuelle dans SQL Server.

Les cinq options utilisent le COUNT() fonction pour obtenir le compte. Évidemment, vous pouvez le remplacer par un astérisque (* ), ou les noms des colonnes pour renvoyer une liste de toutes les tables définies par l'utilisateur.

Option 1 - sys.tables

La façon la plus évidente de le faire est d'interroger le sys.tables vue du catalogue système. Le but de cette vue est de renvoyer une ligne pour chaque table utilisateur, c'est donc exactement ce dont nous avons besoin.

USE WideWorldImportersDW;
SELECT COUNT(*) AS [Number of User Tables]
FROM sys.tables;

Résultat :

+-------------------------+
| Number of User Tables   |
|-------------------------|
| 29                      |
+-------------------------+

Dans ce cas, je renvoie le nombre de tables utilisateur du WideWorldImportersDW base de données.

Si je passe à une autre base de données, j'obtiens un résultat différent :

USE Music;
SELECT COUNT(*) AS [Number of User Tables]
FROM sys.tables;

Résultat :

+-------------------------+
| Number of User Tables   |
|-------------------------|
| 4                       |
+-------------------------+

Comme mentionné, vous pouvez répertorier les tables simplement en remplaçant le COUNT(*) ligne avec un astérisque (* ) ou les noms des colonnes :

USE Music;
SELECT name
FROM sys.tables;

Résultat :

+---------+
| name    |
|---------|
| Artists |
| Genres  |
| Albums  |
| Country |
+---------+

Option 2 - Filtrer les sys.objects par type

Une autre option consiste à interroger le sys.objects vue du catalogue.

USE Music;
SELECT COUNT(*) AS [Number of User Tables]
FROM sys.objects 
WHERE type = 'U';

Résultat :

+-------------------------+
| Number of User Tables   |
|-------------------------|
| 4                       |
+-------------------------+

Dans ce cas, vous devez filtrer par type = 'U' (U est pour "Table utilisateur").

Option 3 - Filtrer les sys.objects par "Type Description"

Une autre façon d'interroger les sys.objects vue est de filtrer les résultats par le type_desc colonne.

USE Music;
SELECT COUNT(*) AS [Number of User Tables]
FROM sys.objects 
WHERE type_desc = 'USER_TABLE';

Résultat :

+-------------------------+
| Number of User Tables   |
|-------------------------|
| 4                       |
+-------------------------+

Option 4 - Filtrer sys.objects à l'aide de la fonction OBJECTPROPERTY()

Vous pouvez également utiliser le OBJECTPROPERTY() fonction dans votre WHERE clause.

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 IsUserTable , 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 User Tables]
FROM sys.objects 
WHERE OBJECTPROPERTY(object_id, 'IsUserTable') = 1;

Résultat :

+-------------------------+
| Number of User Tables   |
|-------------------------|
| 4                       |
+-------------------------+

Option 5 – INFORMATION_SCHEMA.TABLES

Cette option interroge le INFORMATION_SCHEMA.TABLES vue du schéma d'informations. Cette vue renvoie à la fois les vues et les tables, vous devez donc filtrer par TABLE_TYPE = 'BASE TABLE' pour renvoyer uniquement les tables.

USE Music;
SELECT COUNT(*) AS [Number of User Tables]
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE';

Résultat :

+-------------------------+
| Number of User Tables   |
|-------------------------|
| 4                       |
+-------------------------+

Si vous avez besoin de connaître le nombre de tables système, consultez 3 façons de compter le nombre de tables système dans SQL Server.