2009-12-05 6 views
8

データベース名とテーブル名が分かっている場合、SQL Serverのマスターデータベースからテーブルのcolumns-countを検索するにはどうすればよいですか?どのようにSQL Serverのマスターデータベースから任意のデータベース内の任意のテーブルの列数を見つけるには?

データベーステーブルのカラム数を調べる最も早い方法は何ですか?

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

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

私はSQL Server 2000以降をサポートする必要があります。

答えて

17

これは、SQL Serverのバージョンによって若干異なる場合がありますが、これは2005年のために動作します:2000年

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

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準拠の新しいバージョンの

UPDATE:

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

カウントですべてのテーブルを表示することができます。しかし、このポスト[HTTP://www.codeproject .com/KB/database/RefactorTSQLs.aspx] [テーブル内のレコード数を取得するためにCOUNT(*)を使用しないようにしてください]では、前のクエリでは必ずしも正確な結果が得られるわけではありません。 – anonymous

+0

count(*)が正確です。記事をもう一度お読みください – blackanchorage

+0

@TomH: "マスター"になっていて、別のデータベースからテーブルをチェックしたい場合、SQL Server 2005の最初のクエリは機能しません。正確な結果を得るには、 'OBJECT_ID( '')'を使用する必要があります。 –

6

あなたは(とすべきである)これを行うことができますどの程度

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

- "sysobjectsに" ビューを使用して回避しよう - サポートされなくなり、SQL Server 2008 R2以降では削除される可能性があります。

トリックを行う必要があります
SELECT COUNT(*) 
FROM yourdatabase.sys.columns 
WHERE object_id = OBJECT_ID('yourdatabase.dbo.tablename') 

を、そしてそれはおそらくそれを行うための最も簡単かつ最速の方法です:

代わりに、データベースに「SYS」カタログビューを使用します。

+0

しかし、それはSQL Server 2000をサポートしていますか? – anonymous

+0

いいえ、これはSQL Server 2005以降のものです。あなたのポストにSQL Server 2000は言及していませんでした。....... –

+0

申し訳ありません。しかし、私はSQL Server 2000以降をサポートするクエリが必要です。 – anonymous

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 
+0

ようこそ!あなたの答えで、元の質問を対象にしてください。あなたは、質問者の問題文によって定義されていないエンティティを参照しています。また、:この答えは、既存の回答と比較して付加価値を提供しますか? – cfi

3

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

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

それとも、その列が

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

関連する問題