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

use*_*312 8 sql sql-server

如果我知道数据库名和表名,我怎样才能从sql server master数据库中找到表的列数?

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

您如何看待此查询的性能?

select count(*) from SYSCOLUMNS where id=(select id from SYSOBJECTS where name='Categories')
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*m H 17

它可能会略有不同,具体取决于SQL Server的版本,但这适用于2005:

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

2000年:

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

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

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

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


mar*_*c_s 7

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

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

SELECT COUNT(*) 
FROM yourdatabase.sys.columns
WHERE object_id = OBJECT_ID('yourdatabase.dbo.tablename')
Run Code Online (Sandbox Code Playgroud)

这应该是诀窍,它可能是最简单,最快速的方法.


Raj*_*Raj 6

怎么样

select count(*) from <database name.information_schema.columns where table_name = '<table_name>'
Run Code Online (Sandbox Code Playgroud)