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.