web-dev-qa-db-fra.com

Comment compter le nombre de colonnes dans chaque table?

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    
8
kohigany

Vous pouvez regarder les colonnes dans sys.columns :

Renvoie une ligne pour chaque colonne d'un objet qui a 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 nombre de vues
  • sys.objects peut également être utilisé avec une clause WHERE 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;
20
Julien Vavasseur

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

0
Arun
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
0
James