2

WHILEカーソルの代わりに SQL Server 2008 でループを使用しています。WHILEここで、プロシージャにループを記述するのに最適な方法を見つけたいと思います。

方法 1 (BREAK キーワードを使用):

DECLARE @V_Counter INT = 1;

WHILE (1 = 1)
BEGIN
    PRINT @V_Counter;
    SET @V_Counter = @V_Counter + 1;

    IF @V_Counter = 4
    BEGIN
        BREAK;
    END
END

方法 2 (BOOL VARIABLE を使用):

DECLARE @V_Counter INT = 1, @V_CloseLoop TINYINT = 1;

WHILE (@V_CloseLoop = 1)
BEGIN
    PRINT @V_Counter;
    SET @V_Counter = @V_Counter + 1;

    IF @V_Counter = 4
    BEGIN
       SET @V_CloseLoop = 0;
    END
END 

私の質問は次のとおりです。

  • どちらの方法を使用する必要がありますか、または両方が同じですか?
  • 私が使用できる他の方法はありますか?

前もって感謝します...

4

3 に答える 3

0

どちらの方法を使用する必要がありますか、または両方が同じですか? いいえ、どちらも同じではありません。

変数をゼロに設定しても、その後の行は引き続き実行されますが、ブレーク後にループ内の他の何も実行されません。

DECLARE @V_Counter INT = 1;

WHILE (1 = 1)
BEGIN
    PRINT @V_Counter;
    SET @V_Counter = @V_Counter + 1;

    IF @V_Counter = 4
    BEGIN
       BREAK;
    END
    PRINT 'STACKOVERFLOW' // this is not executed.
END   


DECLARE @V_Counter INT = 1, @V_CloseLoop TINYINT = 1;

WHILE (@V_CloseLoop = 1)
BEGIN
    PRINT @V_Counter;
    SET @V_Counter = @V_Counter + 1;

    IF @V_Counter = 4
    BEGIN
       SET @V_CloseLoop = 0;
    END
    PRINT 'STACKOVERFLOW' // this is executed.
END 

break を使用すると、変数をゼロに設定するよりも、常にクリーンなアプローチになります。これは、break を使用すると、その逆よりもコードの保守が容易になるためです。

于 2013-06-29T06:41:14.297 に答える