Comment compter le nombre de colonnes dans chaque table?


8

Je veux écrire un script pour répertorier les tables de ma base de données avec le nombre de colonnes de cette table.

Comme ça:

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

Réponses:


20

Vous pouvez consulter les colonnes dans sys.columns :

Renvoie une ligne pour chaque colonne d'un objet qui possède des colonnes, telles que des vues ou des tables. Voici une liste des types d'objets qui ont des colonnes:

  • Fonctions d'assemblage table (FT)
  • Fonctions SQL de table en ligne (IF)
  • Tables internes (IT)
  • Tables système (S)
  • Fonctions SQL table (TF)
  • Tables d'utilisateurs (U)
  • Vues (V)

Pour le nombre de colonnes dans les tables, cette requête peut être utilisée:

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 peut être remplacé par sys.views pour le comptage dans les vues
  • sys.objects peut également être utilisé avec une WHEREclause sur les types requis:

    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;

Cela fonctionnerait aussi bien qu'il soit préférable (lire Le cas contre les vues INFORMATION_SCHEMA d'Aaron Bertrand) d'utiliser la première requête:

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

0

CHOISIR LE COMPTE (*) DANS INFORMATION_SCHEMA.COLUMNS O TABLE TABLE_NAME = 'TBlName'

C'est assez pour obtenir un certain nombre de colonnes que nous avons dans notre tableau

C'est seulement pour une table


Votre réponse devrait également prendre en compte CATALOGUE et 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.