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

3 modi per contare il numero di tabelle di sistema in un database di SQL Server

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.