Wie zähle ich die Anzahl der Spalten in jeder Tabelle?


8

Ich möchte ein Skript schreiben, um die Tabellen in meiner Datenbank mit der Anzahl der Spalten in dieser Tabelle aufzulisten.

So was:

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

Antworten:


20

Sie können Spalten in sys.columns anzeigen :

Gibt eine Zeile für jede Spalte eines Objekts zurück, das Spalten enthält, z. B. Ansichten oder Tabellen. Das Folgende ist eine Liste von Objekttypen mit Spalten:

  • Tabellenwertige Montagefunktionen (FT)
  • Inline-SQL-Funktionen mit Tabellenwert (IF)
  • Interne Tabellen (IT)
  • Systemtabellen (S)
  • SQL-Funktionen mit Tabellenwert (TF)
  • Benutzertabellen (U)
  • Ansichten (V)

Für die Spaltenanzahl in Tabellen kann diese Abfrage verwendet werden:

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 können durch sys.views ersetzt werden, um in Ansichten gezählt zu werden
  • sys.objects kann auch mit einer WHEREKlausel für die erforderlichen Typen verwendet werden:

    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;

Dies würde auch funktionieren, obwohl es vorzuziehen ist (lesen Sie den Fall gegen INFORMATION_SCHEMA-Ansichten von Aaron Bertrand), die erste Abfrage zu verwenden:

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

0

SELECT COUNT (*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TBlName'

Das ist genug, um eine Reihe von Spalten in unsere Tabelle aufzunehmen

Es ist nur für einen Tisch


Ihre Antwort sollte auch KATALOG und SCHEMA berücksichtigen.
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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.