アプリ版:「スタンプのみでお礼する」機能のリリースについて

環境 WinXpProSP3
SQLserver2005EE

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

A 回答 (4件)

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



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

・インストールするとき照合順序を変更しましたか?
INFORMATION_SCHEMA.COLUMNSを全部大文字にしてもエラーになりますか?
    • good
    • 0
この回答へのお礼

できました!!!

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

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

お礼日時:2008/11/06 14:10

>戻り値が0になってしまいました。


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

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

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

この回答への補足

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

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

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

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

補足日時:2008/11/06 10:33
    • good
    • 0

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



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

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

http://msdn.microsoft.com/ja-jp/library/ms188348 …

この回答への補足

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

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

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

補足日時:2008/11/06 05:57
    • good
    • 0

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



select count(*) from sys.columns
where object_id=object_id('テーブル名')
    • good
    • 1
この回答へのお礼

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

お礼日時:2008/11/06 05:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す