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
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:
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.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;
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
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