Como conto o número de colunas em cada tabela?

8

Quero escrever um script para listar as tabelas no meu banco de dados com o número de colunas nessa tabela.

Como isso:

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

Respostas:

20

Você pode ver as colunas em sys.columns :

Retorna uma linha para cada coluna de um objeto que possui colunas, como visualizações ou tabelas. A seguir, é apresentada uma lista de tipos de objetos que possuem colunas:

  • Funções de montagem com valor de tabela (FT)
  • Funções SQL (IF) com valor de tabela embutido
  • Tabelas internas (TI)
  • Tabelas de sistema (S)
  • Funções SQL (TF) com valor de tabela
  • Tabelas de usuário (U)
  • Visualizações (V)

Para contagem de colunas em tabelas, esta consulta pode ser usada:

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 pode ser substituído por sys.views para contagem em visualizações
  • sys.objects também pode ser usado com uma WHEREcláusula no (s) tipo (s) necessário (s):

    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;

Isso também funcionaria, embora seja preferível (leia O caso contra visualizações do VIEW_SCHEMA de Aaron Bertrand) usar a primeira consulta:

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

SELECIONE A CONTAGEM (*) DE INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TBlName'

É o suficiente para obter um número de colunas que temos em nossa tabela

É apenas para uma mesa

Uma corrida
fonte
Sua resposta deve considerar também CATÁLOGO e 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
fonte