2009-12-05 10 views
8

Se conosco il nome del database e il nome della tabella, come posso trovare il conteggio delle colonne della tabella dal database principale del server SQL?Come trovare il conteggio delle colonne di qualsiasi tabella in qualsiasi database dal database principale del server SQL?

Qual è il modo più veloce per trovare il numero di colonne di qualsiasi tabella di database?

Cosa ne pensi delle prestazioni di questa query?

select count(*) from SYSCOLUMNS where id=(select id from SYSOBJECTS where name='Categories') 

ho bisogno di supporto per il server SQL 2000 in poi.

risposta

17

Si può variare leggermente a seconda della versione di SQL Server, ma questo lavoro per il 2005:

SELECT 
    COUNT(*) 
FROM 
    <database name>.sys.columns 
WHERE 
    object_id = OBJECT_ID('<database name>.<owner>.<table name>') 

Nel 2000:

SELECT 
    COUNT(*) 
FROM 
    <database name>.sysobjects o 
INNER JOIN <database name>.syscolumns c ON 
    c.id = o.id 
WHERE 
    o.name = '<table name>' 

Se si potrebbe avere più tabelle con lo stesso esatto nome della tabella sotto proprietari diversi, quindi dovrai renderne conto. Ho dimenticato il nome della colonna in sysobjects da guardare in cima alla mia testa.

UPDATE per le nuove versioni di SQL Server e la conformità ANSI:

SELECT COUNT(*) 
FROM 
    <database name>.INFORMATION_SCHEMA.COLUMNS 
WHERE 
    TABLE_SCHEMA = '<table schema>' AND 
    TABLE_NAME = '<table name>' 
+0

Ma questo post [http: //www.codeproject .com/KB/database/RefactorTSQLs.aspx] [Prova a non usare COUNT (*) per ottenere il conteggio dei record nella tabella] dice che, la tua query precedente non fornisce sempre un risultato accurato. – anonymous

+0

count (*) è preciso, leggere l'articolo di nuovo – blackanchorage

+0

@TomH: la vostra prima query per SQL Server 2005 non funziona, se siete in "master", e consiglia di controllare una tabella da un altro database. È necessario utilizzare '' OBJECT_ID per ottenere risultati accurati ... –

6

Come su

select count(*) from <database name.information_schema.columns where table_name = '<table_name>' 
7

Si potrebbe (e dovrebbe) fare questo - cercare di evitare di utilizzare il "sysobjects" Vista - non è più supportato e potrebbe essere rimosso in SQL Server 2008 R2 o versioni successive.

Invece, usi "sys" vista del catalogo nel database:

SELECT COUNT(*) 
FROM yourdatabase.sys.columns 
WHERE object_id = OBJECT_ID('yourdatabase.dbo.tablename') 

Questo dovrebbe fare il trucco, ed è probabilmente il modo più semplice e veloce per farlo.

+0

Ma supporta sql server 2000? – anonymous

+0

No, questo è per SQL Server 2005 e versioni successive - non hai citato SQL Server 2000 nel tuo post ....... –

+0

Ci scusiamo per questo. Ma ho bisogno di una query che supporti sql server 2000 e successivi. – anonymous

1
select Object_name(object_id) as "Object Name", count(*) as "Column Count" from Course_Plannning_Expense.sys.columns 
where Object_name(object_id) not like 'sys%' 
group by object_id 
order by "Column Count" desc 
+0

Benvenuti in SO! Nelle tue risposte si prega di indirizzare la domanda originale. Ti stai riferendo a entità non definite dall'affermazione del problema del richiedente. Inoltre: questa risposta fornisce un valore aggiunto rispetto alle risposte esistenti? – cfi

3

si potrebbe rilasciare qualcosa di simile,

select count(*) from information_schema.columns where table_name='yourtablename' 
1

Oppure è possibile visualizzare tutte le tabelle con le loro colonne contano

SELECT COUNT(column_name) as "column_count", table_name FROM INFORMATION_SCHEMA.COLUMNS GROUP BY table_name ORDER BY "column_count" DESC

Problemi correlati