2009-06-23 15 views
10

¿Cómo obtendré el número de campos/entradas en una base de datos usando una declaración SQL?Obteniendo el número de campos en una base de datos con una instrucción SQL?

+0

estás preguntando cómo obtener el número de atributos que tiene una tabla más la cantidad de filas en la tabla? – northpole

+1

¿Qué quiere decir con campos/entradas? ¿Te refieres a la cantidad de Filas? ¿Número de columnas? Número de tablas Todas las anteriores? Si es así, ¿qué motor de base de datos está usando? –

+0

"entradas" en una base de datos? ¿te refieres a los registros, o columnas en una tabla, o el número de tablas? – devio

Respuesta

23

mmm todos los campos en todas las tablas? asumiendo normalización (MSSQL, MySQL, PostgreSQL) puede emitir una consulta sobre INFORMATION_SCHEMA.COLUMNS

SELECT COUNT(*) 
    FROM INFORMATION_SCHEMA.COLUMNS 

O agrupados por tabla:

SELECT TABLE_NAME, COUNT(*) 
    FROM INFORMATION_SCHEMA.COLUMNS 
    GROUP BY TABLE_NAME 

Si varios esquemas tiene el mismo nombre de la tabla en la misma base de datos, DEBE incluir el nombre del esquema también (es decir: dbo.Books, user.Books, company.Books, etc.) De lo contrario, obtendrá los resultados incorrectos. Así que la mejor práctica es:

SELECT TABLE_SCHEMA, TABLE_NAME, COUNT(*) 
FROM INFORMATION_SCHEMA.COLUMNS 
GROUP BY TABLE_SCHEMA, TABLE_NAME 
+0

FYI que también incluirá vistas – SQLMenace

+0

En cualquier caso, no especifica el motor, y ese comportamiento podría ser específico de mssql. –

+0

Tanto MySQL como PostgreSQL tienen table_type en information_schema.tables – SQLMenace

3

probar esto, esto excluye vistas, deje la cláusula donde si quieres vistas

select count(*) from information_schema.columns c 
join information_schema.tables t on c.table_name = t.table_name 
and t.table_type = 'BASE TABLE' 
1

Suena como esto es lo que necesita.

select CountOfFieldsInDatabase = count(*) 
from information_schema.columns 
+1

cuenta ROWS en la tabla que describe las columnas. Una fila por columna en la base de datos. –

+0

@Ken: No, definitivamente está contando el número de columnas en todas las tablas en la base de datos. (Lo cual es algo inútil para querer hacer, pero es lo que solicitó el OP.) –

+0

Ken, cada fila será para una columna – SQLMenace

0
select count(column_name) from information_schema.columns 
where table_name = **name of your table here ** 
0

Sólo por cualesquiera otros lectores que están buscando en Google ...

hay varias soluciones no son de SQL, que pueden ser útiles para el usuario .. aquí es 2 que utilizo.

Ejemplo 1: Acceso VBA:

'Microsoft Access VBA 
Function Count_Fields(Table_Name As String) As Integer 
    Dim myFieldCount As Integer 
    Dim db As DOA.Database 
    Dim rs As DAO.Recordset 
    Set db = CurrentDb 
    Set rs = db.OpenRecordset(Table_Name, dbOpenDynaset) 
    myFieldCount = rs.Fields.Count 
    'return the count 
    Count_Fields = myFieldCount 
    'tidy up 
    Set rs = Nothing 
    Set db = Nothing 
End Function 

Ejemplo 2: PHP 5.1:

<?php 
    // PHP5 Implementation - uses MySQLi. 
    function countFields ($tableName) { 
    $db = new mysqli('myserver.me.com', 'user' ,'pass', 'databasename'); 
    if(!$db) { 
     echo 'ERROR: Could not connect to the database.'; 
     } 
    else { 
     $rs->$db->query("SELECT * FROM ".$tableName."); 
     $fieldCount = $rs->field_count; 
     } 
    return $fieldCount; 
?> 

Disculpen las errata en el anterior - espero que alguien encuentre esto útil

Cuestiones relacionadas