WHILE循环中的Break关键字与变量

时间:2013-06-29 06:17:04

标签: sql sql-server sql-server-2008-r2 while-loop break

我们在SQL Server 2008中使用WHILE循环而不是Cursor。现在我想找到哪种方法最适合在我的程序中编写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 

我的问题是:

  • 我必须使用哪种方法或两者都相同?
  • 我还有其他可以使用的方法吗?

提前致谢...

3 个答案:

答案 0 :(得分: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而不是相反时,代码将很容易维护。

答案 1 :(得分:0)

break被视为"糟糕的编程风格"。因此最好使用变量。除非你有充分的理由。

但是尽量避免使用while循环。在SQL Server中,您经常可以使用良好的SQL语句替换循环,这些语句可以一次性完成所有操作。

答案 2 :(得分:0)

a)你在这做什么?我看到一个计数器被计算到4 ......;)

b)你可以像这样重写它:

DECLARE @V_Counter INT = 1;

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