如果我知道数据库名和表名,我怎样才能从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)
您可以(并且应该)这样做 - 尽量避免使用"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)
这应该是诀窍,它可能是最简单,最快速的方法.
怎么样
select count(*) from <database name.information_schema.columns where table_name = '<table_name>'
Run Code Online (Sandbox Code Playgroud)