dポイントプレゼントキャンペーン実施中!

現在SQLServer2000を使用しています。

存在しているテーブルから主キーを取得したいのですが
うまく行きません。

sysobjects,syscolumnsシステムテーブル辺りから
取得できそうでできないのでイライラしています。

どなたかご教授お願いいたします。

A 回答 (4件)

#1、3です。


言い忘れたことをひとつ
そういえば大昔に同じ質問を@ITの掲示板で見かけた気がします
たぶんDatabase Expartだと思います。検索してみてください。
http://www.atmarkit.co.jp/bbs/phpBB/index.php
そのときのシステムテーブル(sysobjectsやsyscolumns)はバージョンによって仕様が変更になる可能性があるので、できるだけSQL-92準拠のInformation_schemaを使用したほうがよいと、どなたかが発言されてました
実際に2000と2005ではシステムテーブルに仕様変更があったみたいですし、ver7.0と2000も違います
    • good
    • 0
この回答へのお礼

INFORMATION_SCHEMA.KEY_COLUMN_USAGEのテーブルを使用しても
取得できるようですので、最終的にはこっちのほうを使おうと
思います。

丁寧な回答ありがとうございました。

お礼日時:2006/02/21 11:27

システムストアドプロシージャを使用しても良いですか?


それなら単純にsp_help TABLE_NAMEやsp_pkeys TABLE_NAMEで取得できます。
ただし結果セットを取得してさらに別の処理するには、ひと工夫必要です。
.NET系などを併用すれば簡単にできますけど、T-SQLのみの制約で完結させなければいけない場合はopenrowsetなどをさらに理解してください
    • good
    • 0
この回答へのお礼

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

システムストアドプロシージャってのがあるんですね。
まったくしりませんでした。
sp_pkeysで楽に取れそうです。

これを使った場合のデメリット等を調べてこれを使う
方向で行きたいと思います。

Oracleからの移行なんですけど、結構苦労しますね・・・・

お礼日時:2006/02/21 11:25

「主キーの取得」とは、どういう意味でしょうか?


主キーは設計時に決めるものであって、DBMS等から教えてもらうものではないと思いますが?
本末転倒になっていませんか?
    • good
    • 0
この回答へのお礼

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

主キーの取得というのは主キーが設定されているカラム名が
取得したいという意味です。

言葉が足りなかったようで申し訳ありません。
引き続き回答をお待ちしております。

お礼日時:2006/02/17 13:13

select * from information_schema.constraint_column_usage


where table_name='TableA' and constraint_name like 'PK_%'

sysobjects,syscolumnsは使い勝手が悪いのでそれらを元に定義されているViewのinformation_schema系を使用すると便利だと思います。
alter tableで制約名を指定しない。名称をRDBSに任せて主キー制約はPK_で始まるのを前提にしています
    • good
    • 0
この回答へのお礼

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

制約名には指定されているものもあるので、
この前提だと厳しいんですよね。
しかも、名前に統一性がまったく見られないので、
私も困っています。

OracleにあるようなUSER_TAB_COLUMNSやUSER_OBJECTS
のような感じの物があるといいんですけどね。

information_schemaとかいうのが定義されているのですね。
中身を見て見ましたが、何かの時には使えそうです。

お礼日時:2006/02/17 13:11

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

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