web-dev-qa-db-ja.com

SQL Serverマスターデータベースから任意のデータベース内の任意のテーブルの列数を見つける方法は?

データベース名とテーブル名がわかっている場合、SQLサーバーマスターデータベースからテーブルの列数を見つけるにはどうすればよいですか?

データベーステーブルの列数を見つける最も速い方法は何ですか?

このクエリのパフォーマンスについてどう思いますか?

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

SQL Server2000以降をサポートする必要があります。

8
user366312

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>'
17
Tom H

これを行うことができます(そしてそうすべきです)-「sysobjects」ビューの使用を避けてください-サポートされなくなり、SQL Server 2008R2以降で削除される可能性があります。

代わりに、データベースの「sys」カタログビューを使用してください。

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

それでうまくいくはずです。おそらくそれが最も簡単で最速の方法です。

7
marc_s

どうですか

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

あなたはこのようなものを発行することができます、

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

または、列数を含むすべてのテーブルを表示できます

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

1
Marius
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
1
SameerDhoot