GOTO の使用
GOTO ステートメントは、Transact-SQL バッチの実行をラベルまで移動させるときに使用します。GOTO ステートメントとラベルの間にあるステートメントは実行されません。ラベル名は次の構文を使用して定義します。
label_name:
GOTO ステートメントの使用は極力避けてください。GOTO ステートメントを使いすぎると、Transact-SQL バッチのロジックがわかりにくくなることがあります。ほとんどの場合、GOTO ステートメントを使用して実装したロジックは、他の流れ制御ステートメントを使用して実装できます。GOTO ステートメントは、深く入れ子になった流れ制御ステートメントから抜け出す場合に使用することが最適です。
GOTO の目的地であるラベルは、ジャンプ先を示すだけです。ラベルの直前にあるステートメントとラベルの後ろにあるステートメントを分離する働きはありません。ラベルの直前でステートメントを実行するすべてのユーザーは、ラベルをスキップし、ラベルの後のステートメントを実行します。このような状況は、ラベルの直前のステートメントが RETURN などの流れ制御ステートメントでない限り発生します。
次に GOTO の例を示します。
IF (SELECT SYSTEM_USER()) = 'payroll'
GOTO calculate_salary
-- Other program code would appear here.
-- When the IF statement evaluates to TRUE, the statements
-- between the GOTO and the calculate_salary label are
-- ignored. When the IF statement evaluates to FALSE the
-- statements following the GOTO are executed.
calculate_salary:
-- Statements to calculate a salary would appear after the label.