如果我知道数据库名和表名,如何从sql server master数据库中找到该表的列数?
查找任何数据库表的列数的最快方法是什么?
您如何看待此查询的效果?
select count(*) from SYSCOLUMNS where id=(select id from SYSOBJECTS where name='Categories')
我需要支持sql server 2000及更高版本。
答案 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