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を記述しようとするたびに微妙に迷うためメモとして記載しました。
誤り、指摘点等がありましたらご連絡ください。
さんのコメント: さんのコメント: