プロが教えるわが家の防犯対策術!

あるテーブルに、あるカラム(列)が存在するかどうかを調べる方法はあるのでしょうか?

・あるテーブル(TABLE_A)に、あるカラム(COLUMN_A)が存在しない場合はALTER TABLE ~ ADD でカラム(COLUMN_A)を追加する
・COLUMN_Aがある場合は何もしない

というSQL文を作成したいのですが…

宜しくお願いします。

A 回答 (3件)

SQL Server 2000の場合以下のSQLで要求を満たします。



if (select COLUMNPROPERTY( OBJECT_ID('TABLE_A'),'COLUMN_A','PRECISION')) > 0
print('テーブルTABLE_AのカラムCOLUMN_Aが既に存在します。')
else
alter table TABLE_A add COLUMN_A int;
go

補足)
COLUMNPROPERTYの三番目のパラメータ'PRECISION'は指定した列のデータ型の有効桁数を返します。無効な入力の場合NULLを返すますので、カラムがない場合はNULLになります。
そして、NULLと数字0の比較で常にFalseになることを利用しました。
COLUMNPROPERTYの詳細はSQLOnLineHelpを参考にしてください。

参考URL:http://d.hatena.ne.jp/nagakura_eil/20070913/1189 …
    • good
    • 2

SQL Server 2000ですか?2005ですか?


バージョンを明記するように、お願いします。

SQL Server 2005なら、情報スキーマが実装されています。
それより前なら、カタログを直接参照する方法になります。

if not exists(
select o.name,c.name
from syscolumns c, sysobjects o
where c.id=o.id
and o.type='U'
and o.name='tbl1' and c.name='c4'
)
alter table tbl1 add c4 varchar(10);
go
    • good
    • 0

SQLではなく ADOのプログラムとしてならできます。



Columnの個数は Column.count でわかります。

個数だけで特定できるならこれでよいはずです。

さらに該当するカラム名がるかどうかは
Columnの個数の回数分、ループさせて Columnの名前を取得すれば
わかります。
【参考】
●MDBのテーブル定義内容を取得する。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …

____________________________________________________________
どうしても SQLというなら テクニックを使わないとできないと思います。
テーブルのフィールド名をいったん変数やTEXTファイルに取り込まないと無理です。 つまり SQLだけでというのはできないように思えます。
Access などの場合でしたら 関数を作ればできます。
SQL SERVVER 2005 も同様にCLR(ユーザー定義)の関数を作れば可能です。(※ VB.NET 2005 が必要です)
関数の中身は指定されたフィールド名が存在する場合は 1 そうでない場合は 0 を返すようにすればよろしいかと
Access の場合はマクロの中で条件分岐させればできます。
もしくはVBAで可能です。
SQL SERVVER 2005 はストアドの処理中で関数にて条件分岐すれば大丈夫です。
    • good
    • 2

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

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

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


このQ&Aを見た人がよく見るQ&A