• ベストアンサー

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

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

  • q_ta
  • お礼率64% (65/101)

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.4

sys.columnsが見えているだけに権限の可能性は低いと思いますが。。 ・ユーザDBのビュー→システムビューの中にINFORMATION_SCHEMAシリーズのビューはありますか?(みえますか?) 少なくともsys.columnsなどは見えると思います。 ・インストールするとき照合順序を変更しましたか? INFORMATION_SCHEMA.COLUMNSを全部大文字にしてもエラーになりますか?

q_ta
質問者

お礼

できました!!! INFORMATION_SCHEMA.COLUMNSを全部大文字にしたらばっちりです!! とても勉強になりました。 ほんとうにありがとうございました。

その他の回答 (3)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

>戻り値が0になってしまいました。 sys.columnsへのクエリが通ったということなので、あくまで予想ですが、 テーブル名をたとえば「dbo.テーブル名」という形式で指定しませんでしたか? object_idはSQL Serverの組み込み関数なので、名前が重複しない限り object_id('DB名.スキーマ名.テーブル名') object_id('スキーマ名.テーブル名') object_id('テーブル名') のいずれもオブジェクトの内部IDを返してくれます。 一方、INFORMATION_SCHEMAについては、TABLE_SCHEMAとTABLE_NAMEは別カラムに収録されていますので、スキーマ名(先頭のdbo)は除いて指定します。

q_ta
質問者

補足

何度も教えていただき、すみません。 > sys.columnsへのクエリが通ったということなので、 Management Studio ExpressからSQLを実行していますが、 対象をシステムデータベースのmaster等にすれば0が返りますが、 実際にテーブルのあるユーザデータベースに切り替えると やはりエラーが出てしまいます。 オブジェクト名 'information_schema.columns' が無効です。 システムデータベースの状態でスキーマ名を除いて実行したところ、やはり戻りは0でした。

回答No.2

SQL Server 2005から、標準SQL準拠の「情報スキーマ」(information_schema)が実装されています。 情報スキーマは、各RDBMSが独自方式で管理していた表、列、インデクスなどの定義情報を同じ方式で参照できるようにしたものです。ただし、「データベース」の意味合いが各RDBMSで違っていたりするので、RDBMS間で、同じ列に入っている情報が微妙に違ったり、拡張仕様として追加の列がある場合が殆どです。 今回の場合は、information_schemaのcolumns表の行数を、表名を条件に検索することで得られます。 http://msdn.microsoft.com/ja-jp/library/ms188348(SQL.90).aspx

q_ta
質問者

補足

ご回答ありがとうございます。 select count(*) from information_schema.columns where TABLE_NAME = 'テーブル名' 上記で試しましたが、戻り値が0になってしまいました。 どこが間違っているのでしょうか?

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

システムビューを使います。 select count(*) from sys.columns where object_id=object_id('テーブル名')

q_ta
質問者

お礼

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

関連するQ&A

  • SQLServer2005の列数

    SQLServer2005の最大列数を調べていたのですが、 ・幅の狭いテーブルごとの列数:1024 ・幅の広いテーブルごとの列数:30000 と、2つの記述がありました。「幅の広い/狭い」と非常に曖昧な表現に思えてわかり難いのですが、どういう違いがあるのでしょうか?

  • 全テーブルの列数を調査したい

    postgreSQL 8.1.3 を使用しています。 database 内に作成した全テーブルの列数を調査しています。 全テーブルに対して select count(*) を発行する方法でも良いのですが、 テーブル数がいっぱいある際に、とても調査が面倒になってしまいます。 そこで、なんらかのSQLで各テーブルの列数を一気に返す方法はないかと考えていますが、 そんな方法って無いですか?

  • テーブルの列数を調べたい

    現在、MySQL5.0を使ってDBの勉強をしています。 テーブルの列数(カラム数)を検索したいのですが、 そのようなクエリは存在しますか?もしあるようでしたら、どなたか教えてください。

    • ベストアンサー
    • MySQL
  • SQLServer2005のテーブル作成について

    こんにちわ。 いまSQLServer2005Expressをダウンロードして, データベースを作成し,そこにテーブルを作成しようとしています。 そこで「SQLServer Managemant Studio Express」を使用すれば, 一応テーブルを作成することができるのですが, テーブル定義のスクリプトを作成して, OracleのSQL*Plusのようなコマンド機能から実行したいのですが, SQLServerではそれはどの機能にあたるのでしょうか? 教えてください。よろしくお願いします。

  • SQLserverについて

    SQLの勉強を兼ねて、SQLserver を インストールして使ってみたいのですが、 特にサーバーなど立てずに、 スタンドアローンの環境で SQLserverをインストールして ローカルのACCESS のmdbに接続して SQL文など実行出来るのでしょうか? (Enterprise Manager は 使えるのでしょうか?) よろしくお願いします。

  • SQLServer2000でデータ数が10万くらいあるテーブルから、

    SQLServer2000でデータ数が10万くらいあるテーブルから、 OrderByやTopなどのSQL文を使用すると、 SELECTに数秒かかってしまいます。 該当のカラムを主キーにはできないですが、 インデックス化?みたいなことをして、 SELECTを短時間化できないでしょうか?

  • SQLServer7.0の一時テーブルについて

    いまどき、SQLServer7.0でAP開発している者です。 AP内で一時テーブル(#テーブル名、##テーブル名)を使おうと思っていますが、気になることがあります。 一時テーブルは、セッションが切れた時点で、自動的に、SQLServer側が作成した一時テーブルをDROPしてくれるとMSDN等に書かれてあります。 しかし、なんらかの障害がDBサーバとクライアント間で発生して、DROPされずに残ってしまうことはありますでしょうか?明示的にDROP文を発行した方が安全なのでしょうか。

  • SQLServerを使い、SQL文の練習をしたい

    SQLServerを使い、SQL文記述の 練習をしたいと考えています。 (テーブルを作る、結合させる、レコードの合計を出す、などの内容) 自分のPC上で、SQL文を書いて 「わー2つのテーブルが結合した!」 「こっちのテーブルにはないレコードだけを追加できた!」というようなことを実感したいのみなのですが、この目的での利用でも、レンタルサーバーを借りるなどして「サーバー」を準備する必要があるのでしょうか? AccessでSQL文の面白さを知り、 他のデータベース関係のソフトにも触れてみたいと 思ったのが理由です。 よろしくお願いいたします。

  • SQLServerのテーブル定義書(?)を作るツールはないでしょうか?

    おはようございます。 プログラムからSQLServerのデータを使う必要があるのですが、 テーブル定義書(あるテーブルのフィールド名や型、サイズなど)を調べる必要がでてきました。 今まではEnterprizeManagerやAccessをViewerにするなどして中身を確認していたのですが、 テーブル数が60くらいありまして、それを一つずつ確認する手間をなんとか省けないかと考えています。 Internetで検索をかけると、 「SQLServer仕様書 根こそぎ情報収集」 http://www.vector.co.jp/soft/win95/business/se322755.html?g が一番近いようにも思うのですが、 こちらはWindows認証に対応していないようで、 そのままでは当方で使えません。 どなたか以下の条件に見合うツールをご存知の方はいないでしょうか? 1.SQLServerへの接続はWindows認証を使っている 2.テーブルの名称、フィールド名、型、サイズ、主キー設定、NULLの許可を一覧として出力できる 3.フリーソフトである(^_^;) 環境は Windows2003Server+SQLServer2000です。 よろしくお願いします。

  • SQLServerのテーブルについて

    今、SQLSERVER上に5200万行ほどのレコードを保持しているテーブルがあるとします。 クエリアナライザで検索条件を指定して検索しても 1時間ほどかかります。 そこでインデックスというものを追加したいのですが、 データ数が多いのか、うまくいきません。 どなたか教えて下さい。 ● hizuke | datetime ● name | varchar count | int area | varchar ●の部分にインデックスを付加したいと考えています。