2009-09-23 10 views

risposta

65
SELECT COUNT(COLUMN_NAME) 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_CATALOG = 'database' AND TABLE_SCHEMA = 'dbo' 
AND TABLE_NAME = 'table'  
12

In MS-SQL Server 7+:

SELECT count(*) 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'mytable' 
+0

L'information_schema viene popolato dai valori corrispondenti per la connessione al database corrente in modo questo funzionerà. –

32

Questa query ottiene le colonne nome

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.Columns where TABLE_NAME = 'YourTableName' 

E questo si ottiene il conteggio

SELECT Count(*) FROM INFORMATION_SCHEMA.Columns where TABLE_NAME = 'YourTableName' 
1
Select Table_Name, Count(*) As ColumnCount 
From Information_Schema.Columns 
Group By Table_Name 
Order By Table_Name 

Questo codice mostra un elenco di tabelle con un numero di colonne presenti in quella tabella per un database.

Se si desidera conoscere il numero di colonne per una determinata tabella in un database , utilizzare semplicemente la clausola where ad es. where Table_Name='name_your_table'

2

Si può provare di seguito query:

select 
    count(*) 
from 
    all_tab_columns 
where 
    table_name = 'your_table' 
0

Correzione al top query precedente, per consentire di eseguire da qualsiasi database

SELECT COUNT(COLUMN_NAME) FROM [*database*].INFORMATION_SCHEMA.COLUMNS WHERE 
TABLE_CATALOG = 'database' AND TABLE_SCHEMA = 'dbo' 
AND TABLE_NAME = 'table' 
1

La domanda sotto visualizzerà tutte le tabelle e le corrispondenti numero di colonne in uno schema di database

SELECT Table_Name, count(*) as [No.of Columns] 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_schema = 'dbo' -- schema name 
group by table_name 
0

Nella mia situazione, stavo confrontando tabl e conteggio colonne schema per 2 tabelle identiche in 2 database; uno è il database principale e l'altro è il database di archiviazione. Ho fatto questo (SQL 2012+):

DECLARE @colCount1 INT; 
DECLARE @colCount2 INT; 

SELECT @colCount1 = COUNT(COLUMN_NAME) FROM MainDB.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'SomeTable'; 
SELECT @colCount2 = COUNT(COLUMN_NAME) FROM ArchiveDB.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'SomeTable'; 

IF (@colCount1 != @colCount2) THROW 5000, 'Number of columns in both tables are not equal. The archive schema may need to be updated.', 16; 

La cosa importante da notare qui è qualificando il nome del database prima INFORMATION_SCHEMA (che è uno schema, come dbo). Ciò consentirà il break del codice, nel caso in cui le colonne siano state aggiunte al database principale e non al database di archiviazione, in cui, se la procedura fosse consentita, la perdita di dati si sarebbe quasi certamente verificata.

1

si può fare utilizzando: -

SELECT COUNT(COLUMN_NAME) 'NO OF COLUMN' FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Address' 
Problemi correlati