- - PR -
SQLサーバー、ストアドプロシージャ内でのテーブル存在チェック
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-11-14 23:46
ある処理の中で一時的に必要になるテーブル「A」があったとします。基本的には処理の最終段階で当該がDropされる仕組みですが、実行が失敗に終わるとこのテーブルが残ってしまう状況にあります。
次回同処理(ストアドプロシージャ)実行時、テーブル「A」が存在した場合はDropすることから行いたk、その為のテーブル既存チェックが必要です。 ストアードプロシージャ内で IF (SELECT COUNT(*) FROM sysobjects Where Name= 'A' AND xType= 'U') = 1 という記述をすると、'A'というテーブルが存在しません、という構文エラーとなってしまいます。 この当たり前の牽制に悩んでいるのですが、どうにかストアードプロシージャ内で、自DB内のテーブル存在チェックを果たすことはできないのでしょうか?? どなたかご教示頂けますと幸いです。 | ||||
|
投稿日時: 2007-11-14 23:54
えーと、MSSQLってことでいいんでしょうか。RDBMSは。
IF EXISTS(SELECT * FROM sysobject・・・ ってすればいいんじゃないでしょうか。 DBのスクリプトを生成する際、テーブルをDropするオプションを有効にして やると、このようなSQL文を作ってくれたりしますけどね。 そもそも一時的に必要なテーブルなら一時テーブルにすればいいような 気がしますけれども。 | ||||
|
投稿日時: 2007-11-15 00:05
まず、RDBMSの種類とバージョンを書くようにしてください。 恐らくSQLServer 2005かな? 検証していませんが、以下の書き方でどうですか? -- if exists (select 1 from sysobjects where id = object_id('A') xtype= 'U') drop table A -- [追記] この質問はDatabase Expertの方が、投稿先として適切だったと思います。 http://www.atmarkit.co.jp/bbs/phpBB/viewforum.php?forum=26&8532 [ メッセージ編集済み 編集者: dodo 編集日時 2007-11-15 00:12 ] | ||||
|
投稿日時: 2007-11-15 00:47
皆様ご支援ありがとうございます。
現在いる場所、というか自宅にはSQLの環境がありませんので 明日ご提示のSELECT文に変えて検証させて頂きます。 >そもそも一時的に必要なテーブルなら一時テーブルにすればいいような >気がしますけれども。 一時テーブルという概念があるのですか? まさに処理内でのみ必要なテーブルなのですが、どのように定義するのでしょう? 追記: 掲示板が分野に分かれており、入口選択の上書き込むことをしっかり把握できておりませんでした。失礼致しました。 | ||||
|
投稿日時: 2007-11-15 01:54
>一時テーブルという概念があるのですか?
>まさに処理内でのみ必要なテーブルなのですが、どのように定義するのでしょう? ここに質問したり開発したりする前に、まずBOL読むべきじゃないでしょうか。 環境がないにしても検索することくらいはできるはずですが、調べて分かることを すぐに聞いていては何も身につきませんよ。 正直sysobjects知ってて一時テーブルを知らないというのは驚きですし、まずは 手に入る情報で学習していく必要があると思います。 MSSQL使っているならBooks On Lineが入ってるはずです。 学習の教材としても使えますし、開発を行う際にもとてもお世話になります。 まずこれを使い、「人に聞かないとなかなか得られないノウハウ」などを掲示板 で質問するなど、使い分けていく必要があると思います。 | ||||
|
投稿日時: 2007-11-15 09:18
Microsoft SQL Server Management Studio が入っているなら(無料です)
インスタンスを選択→データベースを選択→テーブルを選択したのち ツリー上の該当テーブル名で右クリックし、「名前をつけてテーブルをスクリプト化」から"DROP"を選択していけば、存在チェックを含んだクエリを自動生成してくれます。
|
1