【问题标题】:SQL: Count number of columns in all tables, excluding viewsSQL:计算所有表中的列数,不包括视图
【发布时间】:2011-03-01 17:17:25
【问题描述】:

我正在创建一个返回每个表中列数的查询,但我想排除视图。

以下工作但返回查看结果:

SELECT COUNT(*), table_name
FROM INFORMATION_SCHEMA.COLUMNS
Group By table_name

有什么建议吗?

注意:MSSQL 2005+

【问题讨论】:

标签: sql sql-server-2005


【解决方案1】:

假设 SQL 2005 或更高版本

SELECT 
    t.name,
    count(c.name)
FROM 

    sys.tables t 
    inner join sys.columns c
    ON t.object_id = c.object_id


group by t.name

【讨论】:

  • 输出是两列“表名”和“列数”;完美!
【解决方案2】:

类似这样的:

SELECT COUNT(col.column_name), col.table_name
FROM information_schema.columns col
  JOIN information_schema.tables tbl 
       ON tbl.table_name = col.table_name 
          AND tbl.table_schema = col.table_schema
          AND tbl.table_catalog = col.table_catalog
          AND tbl.table_type <> 'VIEW'
GROUP BY col.table_name

【讨论】:

  • 列名“schema_name”无效。列名“catalog_name”无效。
【解决方案3】:

加入INFORMATION_SCHEMA.TABLES 以查明该表是否为视图。

SELECT COUNT(col.column_name), tab.table_name 
FROM INFORMATION_SCHEMA.tables tab
JOIN INFORMATION_SCHEMA.COLUMNS col ON col.table_name = tab.table_name
WHERE tab.table_type != 'VIEW'
GROUP BY 2
ORDER BY 2 

【讨论】:

  • 每个 GROUP BY 表达式必须包含至少一列不是外部引用。
【解决方案4】:
SELECT  tab.table_name,COUNT(col.column_name)
FROM INFORMATION_SCHEMA.tables tab
JOIN INFORMATION_SCHEMA.COLUMNS col ON col.table_name = tab.table_name
WHERE tab.table_type != 'VIEW'
GROUP BY tab.table_name 
ORDER BY tab.table_name 

此代码显示表名及其前面的列数。 您可以根据需要添加架构名称。

【讨论】:

    猜你喜欢
    • 2019-08-04
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 2011-01-11
    • 2018-02-16
    • 1970-01-01
    • 2021-03-16
    相关资源
    最近更新 更多