如何计算每个表中的列数?


8

我想编写一个脚本来列出数据库中的表以及该表中的列数。

像这样:

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

Answers:


20

您可以查看sys.columns中的列:

为具有列(例如视图或表)的对象的每一列返回一行。以下是具有列的对象类型的列表:

  • 表值汇编函数(FT)
  • 内联表值SQL函数(IF)
  • 内部表(IT)
  • 系统表(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;
    

尽管也可以使用第一个查询(尽管可以从Aaron Bertrand 阅读有关INFORMATION_SCHEMA视图的案例),但这也可以工作:

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

0

从INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='TBlName'中选择COUNT(*)

足够获取我们表中的许多列

仅适用于一张桌子


您的答案也应考虑CATALOG和SCHEMA。
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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.