• ベストアンサー
  • すぐに回答を!

カラム情報取得方法

テーブル内のカラム情報を取得するにはどのようなSQLを作ればよいのでしょうか? 欲しい情報は「カラム名・主キーかどうか・データ型・桁数・NULLを許容かどうか」の5つとなります。 SQL Server は2005と2008を使用していて、どちらでも扱えるSQLがあると助かります。 どうぞ宜しくお願いいたします。

共感・応援の気持ちを伝えよう!

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

  • ベストアンサー
  • 回答No.2
  • 3rd_001
  • ベストアンサー率66% (115/174)

昔、以下のSQLを作ったことがあります。2005では問題なかったです。 私の用はこれで足りたので必要に応じて修正してみてください。 SELECT b.name as "Table名", a.name as "カラム名", c.name as "データ型", a.column_id as "カラム順", a.max_length as "データ長", a.precision, a.scale , case when a.is_nullable =0 then 'Null不可' else 'NUll可' end as "NULL", case when a.is_identity =0 then '×' else '○' end as "オートナンバー", case when a.default_object_id = 0 then '×' else d.definition end as 'デフォルト値', case when f.index_column_id is not null AND e.is_primary_key = 1 then 'PK' else '×' end as 'PK' FROM sys.columns as a Left outer JOIN sys.objects as b ON a.object_id = b.object_id Left outer JOIN sys.types as c ON a.system_type_id = c.system_type_id Left outer JOIN sys.default_constraints as d ON a.default_object_id = d.object_id Left outer JOIN sys.indexes as e ON a.object_id = e.object_id AND e.is_primary_key = 1 Left outer JOIN sys.index_columns as f ON a.object_id = f.object_id AND a.column_id = f.column_id WHERE b.type = 'U' AND c.name != 'sysname' ORDER BY b.name,a.column_id

共感・感謝の気持ちを伝えよう!

その他の回答 (1)

  • 回答No.1

そのためのストアドがデフォルトで用意されています。 [カラム情報取得] sp_columns [ @table_name = ] object [ , [ @table_owner = ] owner ] [ , [ @table_qualifier = ] qualifier ] [ , [ @column_name = ] column ] [ , [ @ODBCVer = ] ODBCVer ] 詳細はヘルプかMSDNをご覧ください。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • カラム情報(主キー、データ型、桁数等)を取得するには

    テーブルに格納されているカラム情報(カラム名、主キー、データ型、データの桁数)を取得したいと考えています。 主キー情報とそれに付随するカラム情報は現在下記のSQL文で取得しています。 SELECT C.TABLE_NAME , COL.COLUMN_NAME, C.CONSTRAINT_TYPE, COL2.DATA_TYPE, COL2.DATA_LENGTH FROM USER_CONSTRAINTS C, USER_CONS_COLUMNS COL, USER_TAB_COLUMNS COL2 WHERE C.TABLE_NAME = COL.TABLE_NAME AND C.CONSTRAINT_NAME = COL.CONSTRAINT_NAME AND C.TABLE_NAME = COL2.TABLE_NAME AND COL.COLUMN_NAME = COL2.COLUMN_NAME AND C.CONSTRAINT_TYPE = 'P' AND UPPER(C.TABLE_NAME) = UPPER('テーブル名') ORDER BY C.TABLE_NAME, COL.POSITION ここで、主キー以外のカラムに対しても同様にカラム情報を取得したいのですが、どのように取得すればよろしいでしょうか? ※カラム名、主キー有無、データ型、桁数 でカラム情報を取得できれば最も良いのですが、 主キー情報を除いた全体のカラム情報を取得する事ができれば、こちらの情報でも助かります 宜しくお願い致します。

  • カラムの削除が出来ません

    Microsoft SQL2000を使用しているのですが あるテーブル(table_A)のカラム(column_A)を削除したいので 以下のようなクエリ及び、GUIでの削除を実行しました。 ----------------実行クエリ----------------------- ALTER TABLE dbo.table_A DROP COLUMN column_A GO ------------------------------------------------- ところがどちらの削除を方法を実行しても以下のようなエラーメッセージが返されます。 -----------------エラーメッセージ---------------- テーブル 'table_A' - テーブルを修正できません。 ODBC エラー : [Microsoft][ODBC SQL Server Driver][SQL Server] 行 2: 'column_A' の近くに無効な構文があります。 ------------------------------------------------- カラム名の変更などはできるのですが どうしても削除だけ出来ません。 なお、このカラムは主キーとしての設定や 他のテーブルへの外部キーとしての設定を行っていません。 型は[varchar] (20) COLLATE Japanese_BIN NULLです。 どなたか対処方法をご存知の方がおられましたら ご回答よろしくお願いします。 それでは失礼します

  • テーブル名をカラムとして取得する方法

    テーブル名をカラムとして取得する方法はありますでしょうか? オラクル8とVB6でプログラムを組んでいます。 例 TABLE Aの内容 カラム1 1 2 3 TABLE B カラム1の内容 4 5 6 SQLは簡略化してかきます。下記のSQLを実行した場合、 select A.カラム1 from A union select b.カラム1 from b 1 2 3 4 5 6 を取得できます。 例えば、上記で、SQL実行後、 下記のような値を取得したいです。 1 ,Aのテーブルだよ 2 ,Aのテーブルだよ 3 ,Aのテーブルだよ 4 ,Bのテーブルだよ 5 ,Bのテーブルだよ 6 ,Bのテーブルだよ それぞれのテーブルの名前を別名で結果に格納したいのです。 何か方法はありますでしょうか? なければ、unionせずに、2回SQLを発行し、それぞれに、 プログラム上で、「Aのテーブルだよ」を後で挿入したいと思っています。

  • SQLiteでカラム情報の取得ってできるんですか?

    SQLiteを使ってみようと思い試しているのですが、カラム名と属性情報の 一覧を表示するコマンドが分かりません。 調べてもどうも見つからないので教えていただきたいと思います。 MySQLやOracleなんかでしたら、desc table名; という構文でカラム情報を 取得することができますが、SQLiteではできないようです。 .helpコマンドで調べてみても、テーブル一覧は見つかりますがカラム一覧は出てきません。 ご存知の方教えていただけると助かります。

  • データベースのテーブルやカラム情報の取得

    データベースの定義を取得するSQL文を教えてください。 データベースはAccessとMySQLです。 得たい情報はデータベースにあるテーブルとカラムです。 例えば、テーブルがTblAとTblBがあって、 それぞれに整数型のFld1と文字型のFlb2があるとします。 この定義情報を取得したいのです。 テーブルだけでなくクエリ(ビュー)の定義情報も取得できるでしょうか。

    • ベストアンサー
    • MySQL
  • カラム名を取得

    テーブルの中のカラム名を取得するにはどうすればいいでしょうか? データがどのカラムに入っているかを調べたいのです。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • ■一番最初に値が入っている(Nullでない)カラム名を取得するには?

    ■一番最初に値が入っている(Nullでない)カラム名を取得するには? 会社の上司が、上記の条件をSQL文一つで出来るというのですが、 postgres SQLの書き方が思いつかず、大変困っています。 状況を説明します。 主に以下のようなカラムを持つテーブルがあります。 ID, 年, 月, タイプ, price_1d, price_2d, price_3d, ..., price_31d price_?d には null or 数字が入ります。 上記のような状況で、 price_1d ~ price_31d の順で最初に値が入っているカラム名を取得し、 最初に値があるのは何年何月何日と判定したいというわけです。 おまけに、タイプには 0 or 1 が入り、 その値によっては、price_?dではなく、別カラム price2_?d を見ないといけないという条件付きです。 このような条件をSQL一つで抽出することははたして本当に可能なのでしょうか? 何かしら解決の糸口となるヒントだけでも構いませんので、 何か情報を頂けると大変ありがたいです。 また、そんなの出来ません、 という情報でもいただけると嬉しいです。 宜しくお願い致します。

  • ストアド内でカラム名一覧を取得

    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ストアド内でカラム名一覧を取得、カンマで繋げてひとつの変数にまとめたい。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 現在開発でストアドを使用する機会があり、そこで不明点が発生し悩んでおります。 以下、現状と質問です。 ■SQL SERVER 2000 ■テーブル(※)のカラム名一覧を取得し、  カラム名をカンマで繋げてひとつの変数に格納したいと思っています。  ※先の処理でカラムを取得したいテーブルをSELECTしており、  対象のテーブル名を変数に代入しています。  カラム一覧を取得するにあたり、以下のようにカーソルで習得し、  FETCHでカラム名を変数に格納しようと考えていましたが、  「'対象テーブル名'」には変数がいれられないので、どうしようかと悩んでいます。  DECLARE CURS_test CURSOR FOR   SELECT name FROM dbo.syscolumns   WHERE id IN   (SELECT id FROM dbo.sysobjects WHERE name = '対象テーブル名')   ORDER BY id, colid;  「sp_executesql」を使用してselect文を流そうとしたのですが、  複数ある列名を取得して、上記で記載しましたように  カラム名をカンマで繋げてひとつの変数に格納する方法がわかりませんでした。  こういった場合、どのように考えて、どのように書けばよいのでしょうか。  まだ触り始めたばかりで、わからないことがわかっていない部分もあり、  質問内容でわかりにくい部分がありましたらご指摘いただければと思います。  どうぞよろしくお願いいたします。

  • SQL 特定のカラムが最大値のレコード取得

    初心者です。SQL文で困っています。 どなたかご教授頂けたらと思います。 環境は、SQL SERVER 2000です。 特定のカラムが最大値のレコードのみ取得したいです。 たとえば、以下のようなデータがあるとします。 コード、履歴番号で主キーとします。 コード|履歴番号 |金額 0001 | 1 | 12000 0001 | 2 | 12001 0001 | 3 | 12002 0002 | 1 | 12000 0002 | 2 | 12001 0002 | 3 | 12002 0003 | 1 | 12000 0003 | 2 | 12001 この場合に、コード毎に履歴番号が最大のレコードのみを取得したいです。 理想の結果は以下になります。 コード|履歴番号 |金額 0001 | 3 | 12002 0002 | 3 | 12002 0003 | 2 | 12001 以上です。よろしくお願いいたします。

  • コラムの値からコラム・テーブルを検索

    プライマリキーが様々なテーブルで別の名前で利用されていると、テーブル同士の関連の全てが把握できずに困っています。以前にコラム名からテーブルを検索する方法を質問したのですが、私が扱っているデータベースでは、プライマリキーがシステムの別の場所で少しだけ異なる名前で利用されていることが多いので、その方法では把握できない関連が出てきます。 具体的には、EMPLOYEES__KEYというEMPLOYEESテーブルのプライマリキーがPERSONALIZE_EMPOYEESというテーブルでPSNLZ_EMP__KEYという名前で使われている状況を考えていただきたいと思います。PSNLZ_EMP__KEYのコラムのレコードは全てEMPLOYEES__KEY内のデータからとられているとします。 以前にselect TABLE_NAME from USER_TAB_COLUMNS where COLUMN_NAME = 'EMPLOYEES__KEY' というSQLで特定のコラムを使っているテーブルを全てリストアップできると教えていただいたのですが、今回のケースでは、同じような内容のコラムなのですが名前が異なるため上記のSQLでは検索できないテーブルがある場合、それをどうやってとってきたらよいのかということです。 コラムの値にtaro, jiro, hanakoなどのようにテーブルまたはシステム内でユニークな値が指定されている場合、コラムの値を指定し、「その値が使われているコラム・テーブルを列挙せよ」というような命令を与えればよいのだということまでは分かりますが、どのようにSQLを書けば良いか教えてください。