¿Cómo cuento el número de columnas en cada tabla?

8

Quiero escribir un script para enumerar las tablas en mi base de datos con el número de columnas en esa tabla.

Me gusta esto:

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

Respuestas:

20

Puede mirar las columnas en sys.columns :

Devuelve una fila para cada columna de un objeto que tiene columnas, como vistas o tablas. La siguiente es una lista de tipos de objetos que tienen columnas:

  • Funciones de ensamblaje con valores de tabla (FT)
  • Funciones SQL (IF) con valores de tabla en línea
  • Tablas internas (IT)
  • Tablas del sistema (S)
  • Funciones SQL con valores de tabla (TF)
  • Tablas de usuario (U)
  • Vistas (V)

Para el recuento de columnas en tablas, esta consulta se puede utilizar:

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 se puede reemplazar por sys.views para contar en vistas
  • sys.objects también se puede usar con una WHEREcláusula sobre los tipos requeridos:

    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;

Esto también funcionaría, aunque es preferible (lea el caso contra las vistas de INFORMATION_SCHEMA de Aaron Bertrand) usar la primera consulta:

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

SELECCIONE EL CONTEO (*) DE INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TBlName'

Eso es suficiente para obtener una cantidad de columnas que tenemos en nuestra tabla

Es solo para una mesa

Arun
fuente
Su respuesta también debe considerar CATÁLOGO y ESQUEMA.
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
James
fuente