2009-09-23 46 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'