2011-03-01 5 views
9

각 테이블의 열 수를 반환하는 쿼리를 만들고 있지만 뷰를 제외하려고합니다.SQL : 뷰를 제외한 모든 테이블의 열 수를 카운트

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

어떤 제안 :

다음 작동하지만보기의 결과를 반환?

참고 : MSSQL 2005 +

+1

어떤 데이터베이스가 있습니까? –

+1

중복 http://stackoverflow.com/questions/1033726/getting-number-of-fields-in-a-database-with-an-sql-statement –

답변

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

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

+0

@ 콜린 : 고마워. 수정 됨 –

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

코드에 일부 기능 추가 –

관련 문제