A WHILE
loop with at most one iteration is equivalent to the use of an IF
statement to conditionally execute one piece of
code. No developer expects to find such usage of a loop statement. If the initial intention of the author was really to conditionally execute one
piece of code, an IF
statement should be used in place.
At worst that was not the initial intention of the author and so the body of the loop should be fixed to use the nested RETURN
,
BREAK
or THROW
statements in a more appropriate way.
Noncompliant code example
WHILE @cond -- noncompliant, loop only executes once
BEGIN
EXEC something;
BREAK;
END;
...
WHILE @cond1 -- noncompliant, loop only executes once
BEGIN
IF @cond2
BEGIN
EXEC something;
BREAK;
END ELSE
BEGIN
RETURN @value;
END;
END;
Compliant solution
IF @cond
BEGIN
EXEC something;
BREAK;
END;
...
WHILE @cond
BEGIN
IF @cond2
BEGIN
EXEC something;
END ELSE
BEGIN
RETURN @value;
END;
END;