IF文による条件分岐でSQLを動的に変化させる:さらっと覚えるSQL&T-SQL入門(10)(2/3 ページ)
アプリケーション開発でデータベースを利用する新人プログラマに向けて、SQLおよびT-SQLを短期間で理解できるよう、開発現場ですぐに必要となる内容を中心に解説する。(編集部)
高度な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.