2

我们WHILE在 SQL Server 2008 中使用循环而不是游标。现在我想找到WHILE在我的程序中编写循环的最佳方法。

方法一(使用 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 变量):

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 回答
0

a) 你在这里做什么?我看到一个计数器最多计数为 4 ... ;)

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

DECLARE @V_Counter INT = 1;

WHILE (@V_Counter < 4)
BEGIN
    PRINT @V_Counter;
    SET @V_Counter = @V_Counter + 1;
END 
于 2015-12-18T11:55:41.673 回答
0

Abreak被认为是“糟糕的编程风格”。所以最好使用变量。除非你有充分的理由。

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

于 2015-12-18T11:43:48.227 回答