こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLServerでテーブルの列数を求めたい。

環境 WinXpProSP3
SQLserver2005EE

SQLServer上にあるテーブルの「列数」を求めるSQL文はどう書けばよいのでしょうか?
あちこち検索してみましたが、わかりませんでした。
よろしくお願いします。

投稿日時 - 2008-11-05 15:02:50

QNo.4455485

すぐに回答ほしいです

質問者が選んだベストアンサー

sys.columnsが見えているだけに権限の可能性は低いと思いますが。。

・ユーザDBのビュー→システムビューの中にINFORMATION_SCHEMAシリーズのビューはありますか?(みえますか?)
少なくともsys.columnsなどは見えると思います。

・インストールするとき照合順序を変更しましたか?
INFORMATION_SCHEMA.COLUMNSを全部大文字にしてもエラーになりますか?

投稿日時 - 2008-11-06 12:05:03

お礼

できました!!!

INFORMATION_SCHEMA.COLUMNSを全部大文字にしたらばっちりです!!

とても勉強になりました。
ほんとうにありがとうございました。

投稿日時 - 2008-11-06 14:10:47

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(4)

ANo.3

>戻り値が0になってしまいました。
sys.columnsへのクエリが通ったということなので、あくまで予想ですが、
テーブル名をたとえば「dbo.テーブル名」という形式で指定しませんでしたか?

object_idはSQL Serverの組み込み関数なので、名前が重複しない限り
object_id('DB名.スキーマ名.テーブル名')
object_id('スキーマ名.テーブル名')
object_id('テーブル名')
のいずれもオブジェクトの内部IDを返してくれます。

一方、INFORMATION_SCHEMAについては、TABLE_SCHEMAとTABLE_NAMEは別カラムに収録されていますので、スキーマ名(先頭のdbo)は除いて指定します。

投稿日時 - 2008-11-06 10:20:13

補足

何度も教えていただき、すみません。

> sys.columnsへのクエリが通ったということなので、
Management Studio ExpressからSQLを実行していますが、
対象をシステムデータベースのmaster等にすれば0が返りますが、
実際にテーブルのあるユーザデータベースに切り替えると
やはりエラーが出てしまいます。

オブジェクト名 'information_schema.columns' が無効です。

システムデータベースの状態でスキーマ名を除いて実行したところ、やはり戻りは0でした。

投稿日時 - 2008-11-06 10:33:15

ANo.2

SQL Server 2005から、標準SQL準拠の「情報スキーマ」(information_schema)が実装されています。

情報スキーマは、各RDBMSが独自方式で管理していた表、列、インデクスなどの定義情報を同じ方式で参照できるようにしたものです。ただし、「データベース」の意味合いが各RDBMSで違っていたりするので、RDBMS間で、同じ列に入っている情報が微妙に違ったり、拡張仕様として追加の列がある場合が殆どです。

今回の場合は、information_schemaのcolumns表の行数を、表名を条件に検索することで得られます。

http://msdn.microsoft.com/ja-jp/library/ms188348(SQL.90).aspx

投稿日時 - 2008-11-05 17:42:42

補足

ご回答ありがとうございます。

select count(*) from information_schema.columns where TABLE_NAME = 'テーブル名'

上記で試しましたが、戻り値が0になってしまいました。
どこが間違っているのでしょうか?

投稿日時 - 2008-11-06 05:57:05

ANo.1

システムビューを使います。

select count(*) from sys.columns
where object_id=object_id('テーブル名')

投稿日時 - 2008-11-05 15:38:37

お礼

ばっちりできました!
ありがとうございました。

投稿日時 - 2008-11-06 05:56:52

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-