2009-09-23 7 views

Antwort

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

Die information_schema von den Werten gefüllt wird auf die aktuelle Datenbankverbindung entspricht, so dies funktionieren wird. –

32

Diese Abfrage die Spalten Namen

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

Und das bekommt man die Zählung

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 

Dieser Code zeigt eine Liste von Tabellen mit einer Anzahl von Spalten in dieser Tabelle für eine Datenbank an.

Wenn Sie die Anzahl der Spalte für eine bestimmte Tabelle in einer Datenbank wissen möchten, dann verwenden Sie einfach where Klausel z. where Table_Name='name_your_table'

2

Sie können unter Abfrage versuchen:

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

Korrektur nach oben Abfrage oben zu ermöglichen, aus jeder Datenbank

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

Die folgende Abfrage wird angezeigt, alle Tabellen und entsprechende Spaltenanzahl laufen in einem Datenbankschema

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

In meiner Situation habe ich tabl verglichen die Schema-Spaltenanzahl für 2 identische Tabellen in 2 Datenbanken; Einer ist die Hauptdatenbank und der andere ist die Archivdatenbank. Ich habe diese (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; 

Wichtig ist hier zu bemerken, bevor INFORMATION_SCHEMA den Namen der Datenbank wird die Qualifikation (das ist ein Schema ist, wie dbo). Dadurch kann der Code unterbrochen werden, falls Spalten zur Hauptdatenbank hinzugefügt wurden und nicht zur Archivierungsdatenbank, in der, wenn die Prozedur ausgeführt werden sollte, fast sicher Datenverlust auftreten würde.

1

Es kann mit getan werden: -

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