- - PR -
[SQL] 複数条件分岐について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-10-13 22:03
こんばんわ。
VB.NET2003を使ってASP.NETのWEBサービス開発をしています。 サーバーはWin2003Serverで、データベースはSQLServer2000です。 現在、SQL文で条件分岐の処理を行っているのですが、思うような処理がされません。 どなたかご教授いただけると幸いです。 やりたいことは・・・ If 条件A 処理1 Else If 条件B 処理2 ElseIf 条件C 処理3 Else というようなことなのですが、このままだと最初のElse以下で1つめの条件と処理は実行されるのですが、その次の条件と処理は実行されません。 そこで、最初のElse以降をBignとEndで囲み、ひとつのトランザクションとして処理をしてみましたが、それでも結果は変わりませんでした。 どういった処理の書き方をすれば思い通りになるのでしょうか? 宜しくお願いいます。 | ||||
|
投稿日時: 2003-10-13 23:10
こんにちは。
スレッド見ました。 「Begin〜End」で記述するのはプロシージャですよね? 「If〜」以外にもCase文があると思いますが... | ||||
|
投稿日時: 2003-10-14 00:35
「思うような処理」というのは察しかねますが、
条件Cが成立すれば処理3は実行されるのでは ないでしょうか? 微妙なインデントがとても気になりますが。 | ||||
|
投稿日時: 2003-10-14 08:54
1つ確認したいのですが、上の処理だと、
@処理1 A処理2 B処理3 Cそれ以外の処理 のいずれか1つ実行されますが、「思っている処理」と相違はないでしょうか? [ メッセージ編集済み 編集者: アティ 編集日時 2003-10-14 09:09 ] | ||||
|
投稿日時: 2003-10-14 09:01
{最初のElse以下}とは、「条件AのElse」のことでしょうか? {その次の条件と処理}とは、「条件Cと処理3」のことでしょうか? やりたいことは、「条件A」が偽の時、「条件B」と「条件C」の両方を検査する、ということですか?Elseは「そうでなければ」なので、「処理2」が行われた、つまり「条件B」が真の時には評価されません。End Ifで条件Bを閉じた後、新たに「If 条件C」とします。 | ||||
|
投稿日時: 2003-10-14 11:43
おはようございます。
みなさんありがとうございます。 あせっていたせいか、間違ったことを投稿していました;; 補足&修正させてください。 えと、思うようにいかないというのは あらかじめ条件に当てはめてデバッグしてみたのですが 条件A>偽>条件B>偽>条件C>真>処理3>その後に続く処理 というのと 条件A>偽>条件B>偽>条件C>偽>その後に続く処理 とうことを やってみたのですが 条件Bが偽であれば条件Cを飛ばしてその後に続く処理へといってしまいます。 そこで条件Bと条件CをBigin〜Endで囲めばいいと聞いてやってみたのですが それでも結果は変わりませんでした。 内心、気がめいっているところなので単なるコーディングミスも考えられますが とりあえず何かあればと思い、投稿させていただきました。 以下のページを参考にやってみましたが もっと詳しく書いてあるページなど知っていれば教えてもほしいです。 http://www.atmarkit.co.jp/fnetwork/rensai/sql21/sql1.html | ||||
|
投稿日時: 2003-10-14 13:21
非常に申し訳ありません。
自己解決を致しました。 原因は条件分岐の構文にまったく関係のない部分での処理ミスでした。 ありがとうございました。 またJittaさんの返信の質問なのですが、SQL文でEndIfというのは使用可能なのでしょうか? 基本的にSQL文だとEndは使わないように教えられたのですが・・・。 もしも使えるというならどういった場合に使って、またどういった違いになるのかを教えていただければうれしいです。 | ||||
|
投稿日時: 2003-10-14 14:50
OracleではEND IFですが、SQL ServerではBEGIN〜ENDによるブロック化ですか。なので、このようになるかと思います。 IF 条件 BEGIN 式 END ELSE IF 条件 BEGIN 式 END あくまで{条件Bを閉じた後}の意味です。よく調べず、Oracleのまま書いてしまいました。失礼しました。 [ メッセージ編集済み 編集者: Jitta 編集日時 2003-10-14 14:53 ] |