• ベストアンサー

EXISTSでの列名指定

ALTER TABLEをするSQLを作りたいのですが 走らせる環境にはすでに作ったSQLが走っているかどうかが わかりません。 その場合にif existsで列名が テーブルに入っているか確認したいのですが object_id(N'[所有者][テーブル名]') だとテーブル名は判別できるのですが object_id(N'[所有者][テーブル名][列名]') のように列名を判別する方法はありませんでしょうか? (このやり方ではダメでした) 宜しくお願いいたします。

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

  • ベストアンサー
回答No.1

object_id だけだと select * from sysobjects で取得できる全てが対象となり、テーブルだけではなく、トリガやストアドなども対象となってしまうと思うのですが、、、 システムテーブルは関係ないと思うので、OBJECTPROPERTYでさらに絞ると確実ですよ^^ select case when exists( select * from syscolumns where id in ( --ユーザテーブル一覧に絞る select id from sysobjects where OBJECTPROPERTY(id, N'IsUserTable') = 1 ) and id = object_id('テーブル名') and name = 'カラム名' ) then 'ある' else 'ない' end

VIPFIRE
質問者

お礼

お返事ありがとうございます。 出来ました、SQLServer初挑戦だったので 勉強になります、ありがとうございました。

関連するQ&A