2011-03-01 13 views
9

Estoy creando una consulta que devuelve el número de columnas en cada tabla, pero quiero excluir las vistas.SQL: cuente el número de columnas en todas las tablas, excepto las vistas

Los siguientes obras, sino devuelve Ver los resultados:

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

alguna sugerencia?

NOTA: MSSQL 2005+

+1

¿Para qué base de datos? –

+1

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

Respuesta

11

Esto supone SQL 2005 o superior

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

Ingreso INFORMATION_SCHEMA.TABLES para averiguar si la tabla es una vista.

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

Cada expresión GROUP BY debe contener al menos una columna que no sea una referencia externa. – Colin

4

Algo como esto:

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

Nombre de columna inválido 'schema_name'. Nombre de columna inválido 'nombre_catálogo'. – Colin

+0

@Colin: gracias. Corregido –

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 

Este código muestra los nombres de tabla y contar sus columnas en frente de ellos. puede agregar el nombre del esquema si lo desea.

+0

Agregue algunos somments a su código –

Cuestiones relacionadas