Ecco un articolo che presenta tre modi per determinare rapidamente quante tabelle di sistema sono presenti nel database corrente in SQL Server.
Tutte e tre le opzioni utilizzano COUNT()
durante la query su sys.objects
vista del catalogo di sistema. Risultano tutti nello stesso output, quindi non è necessario andare oltre la prima opzione. Ma li elencherò comunque.
Opzione 1 – Per tipo
Il modo più conciso per farlo è filtrare in base al type
colonna.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Risultato:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Qui, filtro per un type
di S
. La S
sta per "Tavolo di base del sistema".
Se passo al master database, ottengo un risultato diverso:
USE Master; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Risultato:
+---------------------------+ | Number of System Tables | |---------------------------| | 79 | +---------------------------+
Questo perché il maestro database contiene alcune tabelle di sistema che non si trovano in altri database.
Possiamo eseguire la seguente query per ottenere i nomi:
USE master; SELECT name FROM sys.objects WHERE type = 'S' AND name NOT IN ( SELECT name FROM model.sys.objects WHERE type = 'S' );
Risultato:
+--------------------------+ | name | |--------------------------| | sysextendedrecoveryforks | | syslogshippers | | sysmatrixageforget | | sysmatrixages | | sysmatrixbricks | | sysmatrixconfig | | sysmatrixmanagers | +--------------------------+
In questo caso confronto il master database al modello Banca dati. Puoi specificare in modo esplicito un database diverso scambiando model
con il nome dell'altro database.
Opzione 2 – Per "Descrizione del tipo"
Un'altra opzione è quella di filtrare per type_desc
colonna invece del type
colonna.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type_desc = 'SYSTEM_TABLE';
Risultato:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Opzione 3 – Per OBJECTPROPERTY()
Se per qualche motivo ritieni che le due opzioni precedenti non siano adatte, puoi provare a utilizzare OBJECTPROPERTY()
funzione.
Questa funzione accetta due argomenti:un ID oggetto e una proprietà. L'ID oggetto può essere l'ID tabella e la proprietà può essere IsSystemTable
, che determina se l'oggetto è una tabella di sistema.
Pertanto, potresti fare qualcosa del genere:
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE OBJECTPROPERTY(object_id, 'IsSystemTable') = 1;
Risultato:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Elenca le tabelle
Puoi modificare le tre opzioni se vuoi elencare le tabelle invece di contarle semplicemente. Per fare ciò, sostituisci semplicemente COUNT(*) AS [Number of User Tables]
con *
. In alternativa, puoi nominare esplicitamente le colonne che vuoi restituire.
Conta tabelle definite dall'utente
Se hai bisogno di scoprire il numero di utente tabelle, vedere 5 modi per contare il numero di tabelle definite dall'utente in SQL Server.