반응형
내부적으로는 단순 CASE 표현식이 검색된 CASE 표현식으로 평가됩니다. 그건,
CASE @foo
WHEN 1 THEN 'a'
WHEN 2 THEN 'b'
실제로는 다음과 같이 평가된다.
CASE
WHEN @foo = 1 THEN 'a'
WHEN @foo = 2 THEN 'b'
대부분의 상황에서 차이는 중요하지 않지만 입력 식이 고정되지 않은 경우(예: RAND()가 포함된 경우) 예상치 못한 결과가 발생할 가능성이 높습니다. 따라서 입력 표현식을 한 번 평가한 후 변수에 할당하고 해당 변수를 CASE의 입력 표현식으로 사용하는 것이 좋습니다.
이 규칙은 CASE 입력 표현식에 RAND, NEWID, CRYPT_GEN_RANDOM 중 하나가 사용될 때 문제를 발생시킵니다.
나쁜 예:
CASE CONVERT(SMALLINT, RAND()*@foo) -- Noncompliant
WHEN 1 THEN 'a'
WHEN 2 THEN 'b'
좋은 예:
DECLARE @bar SMALLINT = CONVERT(SMALLINT, RAND()*@foo)
CASE @bar
WHEN 1 THEN 'a'
WHEN 2 THEN 'b'
반응형