我们在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
我的问题是:
提前致谢...
答案 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