連載
» 2007年12月04日 00時00分 UPDATE

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

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

[石橋潤一,株式会社システムインテグレータ]

主な内容

   --Page 1--
▼IF文を利用した条件分岐の基本構文
   --Page 2--
▼高度なIF文の利用
   --Page 3--
▼条件式でのSELECT文の利用
▼まとめ


 前回「Transact-SQLでストアドプロシージャを作成する」に続いて、今回もストアドプロシージャを取り上げます。前回の記事ではストアドプロシージャに関する基本概念を取り上げました。今回はそこから一歩進んで、ストアドプロシージャでの条件制御などを取り上げます。

IF文を利用した条件分岐の基本構文

 前回の記事では、ストアドプロシージャの基本ということで、受け取ったパラメータに基づいてSELECT文を発行する単純な内容を取り上げました。今回は前回作成したストアドプロシージャに対して、条件式を加えてみましょう。

 Transact-SQLでは、一般的なプログラム言語と同じように、「IF」文を利用した条件式でプログラム処理を動的に変化させることが可能です。IF文を利用する構文は次のような形です。

IF 条件式

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

ELSE

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


 IF文を利用する場合、条件式と実行する命令文をセットにして記述します。上記の構文では、TRUEの場合に実行する命令文とFALSEの場合に実行する命令文となっています。条件式にはSELECT文のWHERE句で利用可能な構文や関数を指定できます。また、SELECT文の結果を条件式として利用できます。なお、ELSE以降の文は省略可能です。

 それでは早速具体的なサンプルを確認しましょう。IF文を利用し、渡されたパラメータによって発行するSQLを変化させます。

CREATE PROCEDURE uspSamle2
  @Color varchar(50)
AS
 IF @Color IS NULL
  SELECT ProductID, Name, Color
    FROM Production.Product
    WHERE Color IS NULL
 ELSE
  SELECT ProductID, Name, Color
    FROM Production.Product
    WHERE Color = @Color

 このサンプルでは、ProductテーブルのColor列に対して条件値を設定しています。ProductテーブルにはColor列にNULL値を持つ行が存在するため、パラメータとしてNULLが渡ってきた場合も正しくSELECT文を発行できる必要があります。このためIF文を利用し、パラメータがNULLであった場合はWHERE句にて「IS NULL」を指定、NULL以外の場合はパラメータを利用した値の絞り込みを行っています。

 実際にストアドプロシージャを実行して動作を確認しておきましょう。ストアドプロシージャに対し文字列の引数を渡す場合、シングルコーテーションで文字列を囲む必要がある点に注意してください。

EXEC uspSamle2 'Black'

結果
ProductID        Name                  Color
---------------- --------------------- -------
317              LL Crankarm           Black
318              ML Crankarm           Black
319              HL Crankarm           Black
…中略…
999              Road-750 Black, 52    Black

EXEC uspSamle2 NULL

結果
ProductID        Name                  Color
---------------- --------------------- -------
1                Adjustable Raceaaa    NULL
2                Bearing Ball          NULL
3                BB Ball Bearing       NULL
…中略…
996              HL Bottom Bracket     NULL

 パラメータとしてNULLを渡した場合も正常に検索が行えていることが分かります。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。