Itimek Ben-Gan 은 Jaime Lafargue에 의해이 소식을 들었습니다 .
DECLARE @i INT = 1;
SELECT CASE WHEN @i = 1 THEN 1 ELSE MIN(1/0) END;
결과:
Msg 8134, Level 16, State 1, Line 2
Divide by zero error encountered.
이 과정의 사소한 해결 방법이 있지만 요점은 아직 CASE
하지 않습니다 항상 왼쪽에서 오른쪽으로 평가 / 단락을 보장합니다. 여기서 버그를보고했으며 "디자인 상"으로 닫혔습니다. Paul White는 이후이 Connect 항목을 제출 했으며 고정으로 닫혔습니다. 자체적으로 수정 된 것이 아니라 집계가 CASE
식 의 평가 순서를 변경할 수있는 시나리오에 대한보다 정확한 설명으로 온라인 설명서를 업데이트했기 때문 입니다. 나는 최근 에 이것에 대해 더 많은 블로그를 올렸습니다 .
부록을 편집 하면서, 나는 이것이 최우선 사례이며, 대부분의 경우 왼쪽에서 오른쪽으로 평가 및 단락에 의존 할 수 있으며, 문서와 모순되는 버그이며 결국 수정 될 것이라고 동의합니다 ( 이것은 확실하지 않습니다 -Bart Duncan의 블로그 게시물 에서 후속 대화 를 참조하여 이유를 확인하십시오), 사람들이 그것을 반증하는 단일 에지 사례가 있더라도 항상 진실이라고 말할 때 의견에 동의하지 않아야합니다. Itzik과 다른 사람들이 이와 같은 독방 버그를 발견 할 수 있다면 적어도 다른 버그도있을 수 있습니다. 우리는 OP의 나머지 질문을 알지 못하기 때문에 그가이 단락에 의존 할 것이라고 확신 할 수는 없지만 결국 물린 것으로 끝날 수 있습니다. 나에게 더 안전한 대답은 다음과 같습니다.
당신은 할 수 있지만 일반적으로 의존 CASE
왼쪽에서 오른쪽 및 단락 회로를 평가하기 위해 문서에 설명 된대로, 당신이 항상 할 수있는 말을 정확하지 않습니다. 이 페이지에는 사실이 아닌 두 가지 사례가 있으며 공개적으로 사용 가능한 SQL Server 버전에서는 버그가 수정되지 않았습니다.
여기서 편집 은CASE
집계가 포함되어 있지 않더라도식이 예상 순서대로 평가되지 않는 또 다른 경우입니다 (그만해야합니다) .
CASE
항상 좌우에서 항상 단락을 평가 한다는 데 동의하기가 어렵습니다. ).