sql >> データベース >  >> RDS >> Sqlserver

SQLServerでGOTOを使用する方法

    SQL Serverでは、GOTOを使用できます 実行の流れを変更します。これを使用して、T-SQLコードの別の部分に「ジャンプ」できます。

    仕組みは、ラベルを作成してから、GOTOを使用できるようにすることです。 そのラベルにジャンプします。 GOTOの間のコード ラベルはスキップされ、ラベルで処理が続行されます。

    GOTO ステートメントとラベルは、プロシージャ、バッチ、またはステートメントブロック内のどこでも使用できます。ネストすることもできます。

    例1-基本的な使用法

    これがデモンストレーションの基本的な例です。

    PRINT 1
    PRINT 2
    PRINT 3
    GOTO Bookmark
    PRINT 4
    PRINT 5
    Bookmark:
    PRINT 6
    

    結果:

    1
    2
    3
    6
    

    例2–ラベルは一意である必要があります

    各ラベルは、クエリバッチまたはストアドプロシージャ内で一意である必要があります。

    同じラベルを複数回提供すると、次のようになります。

    PRINT 1
    PRINT 2
    PRINT 3
    GOTO Bookmark
    PRINT 4
    Bookmark:
    PRINT 5
    Bookmark:
    PRINT 6
    

    結果:

    Msg 132, Level 15, State 1, Line 8
    The label 'Bookmark' has already been declared. Label names must be unique within a query batch or stored procedure.
    

    例3–アウトオブバッチラベル

    ラベルはGOTOと同じバッチである必要があります 。現在のバッチ外のラベルに移動することはできません。

    別のバッチでラベルに移動しようとする例を次に示します。

    PRINT 1
    PRINT 2
    PRINT 3
    GOTO Bookmark
    PRINT 4
    GO
    
    PRINT 5
    Bookmark:
    PRINT 6
    GO
    

    結果:

    Msg 133, Level 15, State 1, Line 6
    A GOTO statement references the label 'Bookmark' but the label has not been declared.
    

    この場合、私はGOを使用しました コードを2つのバッチに分割するコマンド。

    例4–IFステートメントのGOTO

    GOTOを使用できます IFで ステートメント。条件が真であるかどうかに応じて、特定のコードにジャンプします。

    ここで@colorを設定します Redへの変数 そのため、コードはRed_Teamにジャンプします 。

    DECLARE @color varchar(50) = 'Red';
    
    IF @color = 'Red' GOTO Red_Team
    IF @color = 'Blue' GOTO Blue_Team
    ELSE  GOTO Other_Team
    
    Red_Team:
    PRINT 'Red Team';
    GOTO Finish_Line
    
    Blue_Team:
    PRINT 'Blue Team';
    GOTO Finish_Line
    
    Other_Team:
    PRINT 'Other Team';
    GOTO Finish_Line
    
    Finish_Line:
    PRINT 'Finished!';
    

    結果:

    Red Team
    Finished!
    

    @colorを設定するとどうなりますか Blueへ :

    DECLARE @color varchar(50) = 'Blue';
    
    IF @color = 'Red' GOTO Red_Team
    IF @color = 'Blue' GOTO Blue_Team
    ELSE  GOTO Other_Team
    
    Red_Team:
    PRINT 'Red Team';
    GOTO Finish_Line
    
    Blue_Team:
    PRINT 'Blue Team';
    GOTO Finish_Line
    
    Other_Team:
    PRINT 'Other Team';
    GOTO Finish_Line
    
    Finish_Line:
    PRINT 'Finished!';
    

    結果:

    Blue Team
    Finished!
    

    完全を期すために、別の色を指定するとどうなりますか。

    DECLARE @color varchar(50) = 'Orange';
    
    IF @color = 'Red' GOTO Red_Team
    IF @color = 'Blue' GOTO Blue_Team
    ELSE  GOTO Other_Team
    
    Red_Team:
    PRINT 'Red Team';
    GOTO Finish_Line
    
    Blue_Team:
    PRINT 'Blue Team';
    GOTO Finish_Line
    
    Other_Team:
    PRINT 'Other Team';
    GOTO Finish_Line
    
    Finish_Line:
    PRINT 'Finished!';
    

    結果:

    Other Team
    Finished!
    

    明らかにこれらは非常に単純な例ですが、GOTOの基本的な概念を示しています。 。

    例5–ラベルの位置

    GOTO 分岐は、GOTOの前または後に定義されたラベルに移動できます 。

    GOTOの前にラベルに移動する例を次に示します。 :

    DECLARE @Counter int = 0;
    
    Loop:
    SET @Counter = @Counter + 1
    IF @Counter < 10
      PRINT @Counter
    ELSE GOTO Finish_Line
    
    GOTO Loop
    
    Finish_Line:
    PRINT 'Finished!'
    

    結果:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    Finished!
    

    GOTOの前にラベルを配置するときは、無限ループを開始しないように注意する必要があります。 けれど。

    また、この例はデモンストレーションのみを目的としています。 WHILEを使用しても同じ結果を得ることができます ループ:

    DECLARE @Counter int = 1;
    
    WHILE @Counter < 10
    BEGIN
      PRINT @Counter
      SET @Counter = @Counter + 1
    END
    PRINT 'Finished!'
    

    結果:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    Finished!
    

    1. MySQLでSQLモードを更新する

    2. WinRTSystem.Data-SQLに接続します

    3. SQLコマンドはどのように分類されますか| UBIQ

    4. ORA-28040:一致する認証プロトコルの例外はありません