• 締切済み

テーブルのどの項目が主キーか判断する方法

SQLで、  desc table1 と入力するとテーブルの項目名、NOT NULLの有無、型を表示させることができますが、 同じような表示形式で主キーかどうかを確認することはできますか? ご存知の人がいましたら教えてください。

みんなの回答

回答No.1

ここは「SQL Server」のカテゴリですが、SQL Serverについての質問ですか? SQL Serverには、「desc 表名」といった機能は、ないのではないでしょうか? 表やインデクスの定義情報の管理方法は、RDBMS毎にかなり違いますし、情報を得る方法も違います。 RDBMSにより、ディクショナリ、カタログ、情報スキーマ等と呼ばれ、主要なRDBMSでは、SQLによる検索を可能にしています。また、いくつかのRDBMSでは、「DESC」(DESCRIBE)といった特別な命令を準備している場合もあります。 RDBMS名とバージョンを明記してください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • sqlservrのシステムテーブルから主キー判定

    sqlservrのシステムテーブルのから主キーの判定を行いたいです。 sysobjects(type='U')でテーブル情報があり、それに紐付くsyscolumnsの項目情報があるとします。 テーブル名,項目名 tbl1,item1 tbl1,item2 tbl1,item3 tbl2,item1 tbl2,item2 これは、 select obj.name as "テーブル名" , col.name as "項目名" from sysobjects obj left join syscolumns col on obj.id = col.id where obj.type = 'U' で取得できますが、 さらに、主キーの項目には○をつけたいです。 テーブル名,項目名,主キー tbl1,item1,○ tbl1,item2,○ tbl1,item3,null tbl2,item1,○ tbl2,item2,null sysindexkeysやsysindexesの情報を引っ掛ければなんとかなるかと思いましたが、何ともならずにGive UP状態です。 システムテーブルを結合して取得する方法はありますでしょうか?

  • 主キー以外の項目にNotNull制約をつける理由について

    あるプロジェクトで OracleにアクセスするJavaのプログラムを書いています。 使用しているテーブル定義は、 主キーでも何でもない項目ほぼ全てにNotNull制約が付いています。 別にNotNull制約を除けば主キー以外の制約は何もありません。 これからつく予定もありません。 そこでふと、 各項目の入力値は全てプログラム側でチェックしていますので プライマリキーや共通のフッタ部分(登録日、登録ProgramIDなど)を除けば Not Null制約は全くいらないんじゃないかと思いました。 このような場合、NotNull制約は何の為についているんでしょうか?

  • テーブルに主キーを作らないデメリットは?

    アクセスのテーブルを作るにおいて 主キーのフィールドを作らなかった場合、 どのようなデメリットや不都合がありますか? 既にいくつか主キーのないテーブルを作ってしまいました。 このまま運用しようか主キーを作るべきか悩んでいます。 SQLサーバーに移行する場合などにエラーになるのでしょうか?

  • descでdefault値やキーなどを表示させる方法が知りたいです。

    desc テーブルで表示されるのは、フィールド名と型だけですが、default値やキーなどを表示させる方法が知りたいです。

  • ACCESS2003で、複数テーブルのある項目を一括して主キーにしたい

    アクセス2003で、1つのmdbの中に、同じデザインのテーブルがたくさんあります。 これらのテーブルには共通して「A、B、C、D」という項目があり、Dが数値型です。 既にテーブルにはデータが入力されています。(正確には、エクセルファイルから「TransferSpreadsheet」を使って同じ形式の複数シートを一気にインポートした状態です) 全てのテーブルに対して、一括してこのDという項目を主キーに設定したいのですが、どのようにすれば良いでしょうか? テーブル数は、200個程度あります。 VBAを利用したり、外部ツールを利用しても良いです。 ご教示、よろしくお願いします。

  • 外部から取り込んだテーブルに主キーを設定するには

    外部から取り込んだテーブルに主キーを設定するには sql server 2000 のデータベースにsqlserver 2008 express editionをインストールしたPCで別のデータベースのテーブルをインポートウィザードにて取り込み、そのテーブルに主キーを設定しようと、新しいログイン名で-ログイン-セキュリティ-ユーザー-プロパティの画面でセキュリティ保護可能なリソースを選択し、オブジェクトの列の権限にて更新、選択、等許可に設定しても、テーブルの変更が(主キーの設定)ができません。 この変更は、もともと無理なことなのでしょうか。そうだとしたら他にテーブルの列設定を変更する方法はないのでしょうか どうかご教授お願いします。宜しくお願いします。 PC os XP pro (sql server 2008 express edition) サーバー WINDOWS 2000 server SQL server 2000

  • varchar型を主キーに…

    現在サーブレット/JSPを利用してDBにユーザアカウントを登録、削除、更新、一覧をできるようするシステムを作成しています。 テーブルを create table loginuser ( userId char(16) not null default '', passwd char(16) not null default '', name varchar(50) not null default '', accessFlg int(1) not null default '0', primary key(userId)); で作成しました。 IDが数字の時はDBに登録ができるのですがIDに文字を入力するとDBに登録されません。 主キーをvarchar型で使用するのは不可能なのでしょうか? ご返答をよろしくお願いします。

  • データベース:主キーが文字列の場合IDを振るべき?

    テーブルの主キーが文字列の場合、 その主キーの文字列を通し番号に置き換えて、 その文字列は別テーブルに移したほうが検索が速いですか? 例えば、テーブルが CREATE TABLE spec ( test_name VARCHAR(40) NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_name) ); で、40文字という長いテスト項目名の場合、 CREATE TABLE spec ( test_id INTEGER NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_id) ); と CREATE TABLE test ( test_id INTEGER NOT NULL, test_name VARCHAR(40) NOT NULL, PRIMARY KEY(test_id) ); という二つのテーブルに分けたほうが検索は速くなりますか? (もちろん、結合する時間も含めてです。) もし速くなるとしても、文字数が3文字など少ない場合は 通し番号に置き換えてもきっと効果は薄いですよね? 何文字以上の文字列なら通し番号に置き換えたほうが速いですか? 皆さんはどのように決めていますか?

  • テーブル設計の主キーについて質問があります。

    テーブル設計の主キーについて質問があります。 マスタを物理削除せず、論理削除するデータベースを考える時、 削除日時を主キーに持ってきたりするレイアウトはよくありますでしょうか。 DBはmysqlです。 例) <会社マスタ> (PK)会社コード (PK)会社支店コード (PK)削除日時    会社名    住所 主キーにNULL値は入れられないと思うのですが(←あっていますでしょうか)、 削除日時を無理やりNULL以外のものを入れたとします。 そしてアプリケーションで検索を考えた時に、”削除になっていないもの” を対象にレコードを探します。 インデックス(この場合は主キーですが)が検索高速化に有効に使われるのは、 なるべく対象が少なくなるものと思います。 以上を考えれば、 割合が多い削除日時を主キーにもってくるのはいかがなものかと思うのですが、 どうなのでしょうか。 宜しくアドバイスお願いいたします。

    • ベストアンサー
    • MySQL
  • テーブルの項目が異なるテーブルの結合方法

    こんばんは。 すみませんが、下記のように出力するSQLを教えて下さい。 [処理table]のstatusが「新規」のに該当する場合、[処理table]の内容を、 [処理table]のstatusが「新規」のに該当しない場合、[処理ログテーブル] の「日付」が現在日付に近い内容のみを出力する。  氏名 project名 status 日付 ------+----------+-------+-------  鈴木 softA  新規  大塚 softB  承認   08/20  大沢 softC  新規 を期待しています。 SQLの経験が少ない為、悩んでます。 「UNION ALL 」について調べて見ましたが、カラム数が異なるのでNGと判断 しました。 「それぞれの条件の結果を縦につなげて…」とイメージしてみたのですが、 それに相当する資料が見当たらず、悩んでいます。 tableの[処理ログtable]の「日付」を[処理table]の項目とすればよ いのですが、現在のDB設計がこのようになってしまっているので、改善できま せん。 補足もしますので、お忙しいところすみませんが、宜しくお願いします。 -説明- [顧客table](主キー:顧客ID) 顧客ID 氏名 ------+------- 020001 鈴木 020002 大塚 020003 大沢 [処理table](主キー:通番(自動発番)) 通番 顧客ID projectID status ----+-------+----------+----------- 0001 020001   0001 新規 0002 020003   0003 新規 0014 020002   0004 承認 [処理ログtable](主キー:通番(自動発番)) 通番 顧客ID projectID status 日付 ----+-------+----------+-------+------ 0032 020002   0004 修正  08/02 0033 020002   0004 修正  08/15 0034 020002   0004 承認  08/20 [projecttable](主キー:projectID) projectID project名 ---------+----------------   0001 softA   0002 softB   0003 softC   0004 softF