2011-03-01 30 views
9

我正在创建一个查询,该查询返回每个表中的列数,但我想排除视图。SQL:统计所有表中的列数,排除视图

下面的作品,但返回查看结果:

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

有什么建议?

注:MSSQL 2005+

+1

对于什么数据库? – 2011-03-01 17:22:18

+1

duplicate http://stackoverflow.com/questions/1033726/getting-number-of-fields-in-a-database-with-an-sql-statement – 2011-03-01 19:59:43

回答

11

这是假定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 
0

加入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 
+0

每个GROUP BY表达式都必须包含至少一个不是外部参考。 – Colin 2012-04-26 09:20:20

4

事情是这样的:

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 
+0

列名'schema_name'无效。 列名'catalog_name'无效。 – Colin 2012-04-26 09:19:28

+0

@Colin:谢谢。更正 – 2012-04-26 09:37:02

0
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 

这段代码显示表名称及其列在他们面前算。 如果需要,您可以添加模式名称。

+0

在代码中添加一些代码 – 2016-01-11 06:58:50