Come contare il numero di colonne in ciascuna tabella?


8

Voglio scrivere uno script per elencare le tabelle nel mio database con il numero di colonne in quella tabella.

Come questo:

table name      number       
---------       --------     
table1            1         
table2            13        
table3            2         
table4            6    

Risposte:


20

Puoi guardare le colonne in sys.columns :

Restituisce una riga per ogni colonna di un oggetto con colonne, come viste o tabelle. Di seguito è riportato un elenco di tipi di oggetti con colonne:

  • Funzioni di assemblaggio con valori di tabella (FT)
  • Funzioni SQL con valori di tabella incorporati (IF)
  • Tabelle interne (IT)
  • Tabelle di sistema (S)
  • Funzioni SQL con valori di tabella (TF)
  • Tabelle utente (U)
  • Visualizzazioni (V)

Per il conteggio delle colonne nelle tabelle, è possibile utilizzare questa query:

SELECT [Schema] = s.name
    , [Table] = t.name
    , number = COUNT(*)
FROM sys.columns c
INNER JOIN sys.tables t ON c.object_id = t.object_id
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
GROUP BY t.name, s.name
  • sys.tables può essere sostituito da sys.views per il conteggio nelle viste
  • sys.objects può anche essere utilizzato con una WHEREclausola sui tipi richiesti:

    SELECT [Schema] = s.name
        , [Table] = o.name
        , number = COUNT(*)
        , o.type_desc
    FROM sys.columns c
    INNER JOIN sys.objects o ON c.object_id = o.object_id
    INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
    WHERE type IN (
        'U'     --> U = Table (user-defined)
        , 'V'   --> V = View
        , ...) 
    GROUP BY o.name, s.name, o.type_desc;

Funzionerebbe anche questo, sebbene sia preferibile (leggi il caso rispetto alle viste INFORMATION_SCHEMA da Aaron Bertrand) utilizzare la prima query:

SELECT TABLE_SCHEMA
    , TABLE_NAME
    , number = COUNT(*) 
FROM INFORMATION_SCHEMA.COLUMNS
GROUP BY TABLE_SCHEMA, TABLE_NAME;

0

SELEZIONA COUNT (*) DA INFORMATION_SCHEMA.COLUMNS DOVE TABLE_NAME = 'TBlName'

Questo è abbastanza per ottenere un numero di colonne che abbiamo nella nostra tabella

È solo per un tavolo


La tua risposta dovrebbe considerare anche CATALOGO e SCHEMA.
McNets,

0
select st.name, count(1) as column_count 
from sys.tables st
inner join sys.columns sc on st.object_id = sc.object_id
where st.name like '%%'
group by st.name
order by count(1) desc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.