Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

5 modi per contare il numero di tabelle definite dall'utente in un database di SQL Server

Di seguito sono riportati cinque metodi che è possibile utilizzare per determinare rapidamente quante tabelle definite dall'utente sono presenti nel database corrente in SQL Server.

Tutte e cinque le opzioni utilizzano COUNT() funzione per ottenere il conteggio. Ovviamente puoi sostituirlo con un asterisco (* ), o i nomi delle colonne per restituire un elenco di tutte le tabelle definite dall'utente.

Opzione 1 – sys.tables

Il modo più ovvio per farlo è interrogare sys.tables vista del catalogo di sistema. L'intero scopo di questa visualizzazione è restituire una riga per ogni tabella utente, quindi è esattamente ciò di cui abbiamo bisogno.

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

Risultato:

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

In questo caso restituisco il numero di tabelle utente dal WideWorldImportersDW banca dati.

Se passo a un altro database, ottengo un risultato diverso:

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

Risultato:

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

Come accennato, puoi elencare le tabelle semplicemente sostituendo COUNT(*) riga con un asterisco (* ) o i nomi delle colonne:

USE Music;
SELECT name
FROM sys.tables;

Risultato:

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

Opzione 2 – Filtra sys.objects per tipo

Un'altra opzione è interrogare sys.objects vista catalogo.

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

Risultato:

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

In questo caso devi filtrare per type = 'U' (U sta per "Tabella utente").

Opzione 3 – Filtra sys.objects per "Descrizione del tipo"

Un altro modo per interrogare sys.objects view serve a filtrare i risultati in base a type_desc colonna.

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

Risultato:

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

Opzione 4 – Filtra sys.objects utilizzando la funzione OBJECTPROPERTY()

Puoi anche usare OBJECTPROPERTY() funzione nel tuo WHERE clausola.

Questa funzione accetta due argomenti:un ID oggetto e una proprietà. L'ID oggetto può essere l'ID tabella e la proprietà può essere IsUserTable , che determina se l'oggetto è una tabella di sistema.

Pertanto, potresti fare qualcosa del genere:

USE Music;
SELECT COUNT(*) AS [Number of User Tables]
FROM sys.objects 
WHERE OBJECTPROPERTY(object_id, 'IsUserTable') = 1;

Risultato:

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

Opzione 5 – INFORMAZIONI_SCHEMA.TABLES

Questa opzione interroga INFORMATION_SCHEMA.TABLES vista schema di informazioni. Questa vista restituisce sia le viste che le tabelle, quindi è necessario filtrare per TABLE_TYPE = 'BASE TABLE' restituire solo tabelle.

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

Risultato:

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

Se hai bisogno di scoprire il numero di tabelle di sistema, vedi 3 modi per contare il numero di tabelle di sistema in SQL Server.