2009-09-23 76 views

回答

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

在MS-SQL服务器7+:

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

INFORMATION_SCHEMA信息被从对应于当前数据库连接,以便这将工作中的值填充。 – 2009-09-23 09:53:50

32

该查询得到的列名

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

而这一次得到的计数

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 

此代码显示了该表中列表中列出的数量为数据库的列数。

如果您想知道数据库中的特定表的列数 ,那么只需使用where子句即可。 where Table_Name='name_your_table'

2

你可以试试下面的查询:

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

更正顶部上面的查询,允许从任何数据库

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

下面的查询将显示所有表和相应的列计数运行在数据库模式中

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

在我的情况下,我正在比较tabl e数据库中2个相同表的e模式列数;一个是主数据库,另一个是档案数据库。我这样做(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; 

这里要注意的重要一点是INFORMATION_SCHEMA前出线数据库名称(这是一种模式,像dbo)。如果将列添加到主数据库而不添加到归档数据库(如果允许运行该过程,则几乎肯定会发生数据丢失),这将允许代码打破。

1

这是可以做到用: -

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