T-SQL の制御文の簡単な使い方をメモとして掲載します。

動作確認は SQL Server 2005 Developer Edition を使用しています。

1. 条件文

1.1 CASE文

CASE文を使用すると、CASEで指定した式とWHENで指定した値が等しい場合に結果を設定する方法とCASEでは式を指定せず、WHENの式が真(TRUE)となった場合に結果を設定する条件文を記述することができます。

-- CASEで指定された式とWHENで指定された
-- 式が等しい場合にTHENの内容が評価される
select  [name]
       ,CASE [type]
          WHEN 'R' THEN 'ROLE'
          WHEN 'U' THEN 'WIN'
          ELSE 'SQL??'
         END type_name
  from sys.database_principals

-- WHENで指定された式がTRUEの場合にTHENのステートメント
-- が評価される
select  [name]
       ,CASE 
          WHEN [type] = 'R' THEN 'ROLE'
          WHEN [type] = 'U' THEN 'WIN'
          ELSE 'SQL??'
         END type_name
  from sys.database_principals

1.2 IF文

IFで指定した式が真の場合にIFのステートメントを実行し、そうでない場合オプションのELSEで指定された式を実行できます。変数はDECLAREを使用します。

-- 変数宣言、値セット
DECLARE @cond int
SET @cond = 12

-- IF文を使用する
IF @cond > 10
  BEGIN
    SELECT TOP 3 *
      FROM sys.database_principals
  END
ELSE
  BEGIN
    SELECT TOP 3 *
      FROM sys.server_principals
  END

 

2. 制御文

2.1 WHILE

WHILEで指定される式がTRUEの間、WHILEのブロックが実行されます。ブロック内でBREAKやCONTINUEを使用し処理の実行を制御できます。使用例は[T-SQL] カーソル定義の基本を参照してください。

2.2 RETURN

処理をRETURNで終了します。Return に式を設定して返り値として指定することもできます。RETURNを使用した例は[T-SQL] ユーザ定義関数(ファンクション)を定義する を参照願います。

2.3 GOTO

指定したラベルまで処理をジャンプします。

-- ラベルの位置までジャンプ
IF 1 = 1
 GOTO Skip

Print 'skipped'

Skip:
PRINT 'goto executed'

2.4 WAITFOR

処理を指定時間まで待機するか、指定した間処理を停止します。

-- 5秒処理を停止
WAITFOR DELAY '00:00:05'
PRINT 'end'
-- 1時になるまで処理を停止
WAITFOR TIME '01:00:00'

3. まとめ

説明は以上です。簡単な説明ですが、毎度T-SQLを記述しようとするたびに微妙に迷うためメモとして記載しました。

誤り、指摘点等がありましたらご連絡ください。