2011-03-01 35 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