2009-06-23 4 views
10

Come si ottiene il numero di campi/voci in un database utilizzando un'istruzione SQL?Ottenere il numero di campi in un database con un'istruzione SQL?

+0

sei chiedendo come ottenere il numero di attributi di una tabella più il numero di righe nella tabella? – northpole

+1

Cosa intendi per campi/voci? Intendi numero di righe? Numero di colonne? Numero di tabelle? Tutti i precedenti? In tal caso, quale motore di database stai usando? –

+0

"voci" in un database? intendi record, o colonne in una tabella o numero di tabelle? – devio

risposta

23

mmm tutti i campi in tutti i tavoli? assumendo standard (MSSQL, MySQL, Postgres) è possibile emettere una query su INFORMATION_SCHEMA.COLUMNS

SELECT COUNT(*) 
    FROM INFORMATION_SCHEMA.COLUMNS 

o raggruppati da tavolo:

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

Se più schemi ha lo stesso nome della tabella nella stessa DB, DEVI includere anche il nome dello schema (es .: dbo.Books, user.Books, company.Books ecc.) In caso contrario otterrai risultati errati. Così la pratica migliore è:

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

FYI che includerà anche le viste – SQLMenace

+0

In ogni caso, non ha specificato il motore, e tale comportamento potrebbe essere specifico di mssql. –

+0

sia MySQL che PostgreSQL hanno table_type in information_schema.tables – SQLMenace

3

provare questo, ciò esclude vista, lasciare la clausola in cui se volete vista

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

Suona come questo è quello che ti serve.

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

il suo conteggio ROWS nella tabella che descrive le colonne. Una riga per colonna nel database. –

+0

@Ken: No, sta sicuramente contando il numero di colonne su tutte le tabelle nel DB. (Che è una cosa un po 'inutile da fare, ma è quello che l'OP chiedeva). –

+0

Ken, ogni riga sarà per una colonna – SQLMenace

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

Proprio per tutti gli altri lettori che sono googling ...

Ci sono diverse soluzioni non-SQL, che possono essere utili per l'utente .. ecco 2 che uso.

Esempio 1: Accesso 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 

Esempio 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; 
?> 

Ci scusiamo per eventuali errori di digitazione in quanto sopra - spero che qualcuno trova questo utile

Problemi correlati