検索
連載

IF文による条件分岐でSQLを動的に変化させるさらっと覚えるSQL&T-SQL入門(10)(2/3 ページ)

アプリケーション開発でデータベースを利用する新人プログラマに向けて、SQLおよびT-SQLを短期間で理解できるよう、開発現場ですぐに必要となる内容を中心に解説する。(編集部)

PC用表示
Share
Tweet
LINE
Hatena

高度なIF文の利用

 続いてもう少し高度なIF文の利用を取り上げます。先ほどのサンプルでは、条件式に基づいて実行する命令文が1つだけでしたが、複数の命令を実行することも可能です。しかし、IF文では、単純に命令文を記述した場合は1つの命令文しか実行しません。次の例を見てみましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 一見すると、それぞれの条件式に従ってメッセージを返しているように見えます。しかし、実際にストアドプロシージャを実行してみると次のような結果となります。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 このように、条件式で分かれているはずの命令文が実行されてしまいます。これはIF文が命令文を1つしか条件式として取り扱っていないことに起因します。このような問題を解決するために、「BEGIN…END」構文を利用します。BEGIN…END構文は、命令文をブロック化しひとまとめにできます。IF文で利用する場合、次のような構文となります。

IF 条件式

 BEGIN

     条件式がTRUEの場合に実行する命令文

 END

ELSE

 BEGIN

     条件式がFALSEの場合に実行する命令文

 END


 それでは、uspSamle3をBEGIN…END構文を利用して想定したとおりに動くように直しましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 ストアドプロシージャ全体をBEGIN…ENDでブロック化するとともに、IF文の中に埋め込んだ条件式に対してもBEGIN…ENDを指定しています。実行結果は次のようになります。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 BEGIN…END構文の利用によって、意図したとおりの動きになっていることが分かります。このようにIF文で複数の命令文を記述する場合、例のようにBEGIN…ENDを正しく利用する必要があります。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る