如何从sql server master数据库中查找任何数据库中任何表的列数?

时间:2009-12-05 12:20:13

标签: sql sql-server

如果我知道数据库名和表名,如何从sql server master数据库中找到该表的列数?

查找任何数据库表的列数的最快方法是什么?

您如何看待此查询的效果?

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

我需要支持sql server 2000及更高版本。

6 个答案:

答案 0 :(得分:17)

根据SQL Server的版本,它可能略有不同,但这适用于2005:

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

2000年:

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

如果您可能在不同的所有者下有多个具有相同确切表名的表,那么您需要考虑到这一点。我忘记了sysobjects中的列名,看看我的头顶。

更新SQL Server和ANSI合规性的更新版本:

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

答案 1 :(得分:7)

您可以(而且应该)这样做 - 尽量避免使用“sysobjects”视图 - 它不再受支持,可能会在SQL Server 2008 R2或更高版本中删除。

而是使用数据库中的“sys”目录视图:

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

这应该可以解决问题,而这可能是最简单,最快速的方法。

答案 2 :(得分:6)

怎么样

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

答案 3 :(得分:3)

您可以发布类似的内容,

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

答案 4 :(得分: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

答案 5 :(得分:1)

或者您可以查看列数

的所有表格

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