Как подсчитать количество столбцов в каждой таблице?


8

Я хочу написать скрипт для перечисления таблиц в моей базе данных с количеством столбцов в этой таблице.

Нравится:

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

Ответы:


20

Вы можете посмотреть на столбцы в sys.columns :

Возвращает строку для каждого столбца объекта, который имеет столбцы, такие как представления или таблицы. Ниже приведен список типов объектов, имеющих столбцы:

  • Табличные функции сборки (FT)
  • Встроенные табличные функции SQL (IF)
  • Внутренние столы (ИТ)
  • Системные таблицы (S)
  • Табличные функции SQL (TF)
  • Пользовательские таблицы (U)
  • Просмотры (V)

Для подсчета столбцов в таблицах можно использовать этот запрос:

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 можно заменить на sys.views для подсчета в представлениях
  • sys.objects также можно использовать с WHEREусловием для обязательных типов:

    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;

Это также будет работать, хотя предпочтительнее (см. «Дело против представлений INFORMATION_SCHEMA» от Аарона Бертранда) использовать первый запрос:

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

0

ВЫБЕРИТЕ COUNT (*) ИЗ INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TBlName'

Этого достаточно, чтобы получить количество столбцов в нашей таблице

Это только для одного стола


Ваш ответ должен учитывать CATALOG и SCHEMA тоже.
МакНетс

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.