왜 이런 CASE
표현 이 됩니까?
SELECT CASE column
WHEN 'a' THEN '1'
WHEN 'b' THEN '2'
... c -> i
WHEN 'j' THEN '10'
WHEN 'k' THEN '11'
END [col]
FROM LinkedServer.database.dbo.table
이 결과를 생성 하시겠습니까?
오류 메시지 : 메시지 8180, 수준 16, 상태 1, 줄 1
문을 준비 할 수 없습니다.
메시지 125, 수준 15, 상태 4, 줄 1
사례 식은 수준 10에만 중첩 될 수 있습니다.
CASE
여기 에는 중첩 된 표현이 없지만 "분기"가 10 개 이상 있습니다.
또 다른 이상한. 이 인라인 테이블 반환 함수는 동일한 오류를 생성합니다.
ALTER FUNCTION [dbo].[fn_MyFunction]
(
@var varchar(20)
)
RETURNS TABLE
AS
RETURN
(
SELECT CASE column
WHEN 'a' THEN '1'
WHEN 'b' THEN '2'
... c -> i
WHEN 'j' THEN '10'
WHEN 'k' THEN '11'
END [col]
FROM LinkedServer.database.dbo.table
)
그러나 유사한 다중 문 TVF는 잘 작동합니다.
ALTER FUNCTION [dbo].[fn_MyFunction]
(
@var varchar(20)
)
RETURNS @result TABLE
(
value varchar(max)
)
AS
BEGIN
INSERT INTO @result
SELECT CASE column
WHEN 'a' THEN '1'
WHEN 'b' THEN '2'
... c -> i
WHEN 'j' THEN '10'
WHEN 'k' THEN '11'
END [col]
FROM LinkedServer.database.dbo.table
RETURN;
END
SELECT CASE v.V WHEN 'a' THEN 1 WHEN 'b' THEN 2 END FROM (VALUES ('a'), ('b')) AS v (V);
과SELECT CASE WHEN v.V = 'a' THEN 1 WHEN v.V = 'b' THEN 2 END FROM (VALUES ('a'), ('b')) AS v (V);
에 번역 정확히 같은 CASE 표현식과 같이 재정의 실행 계획 (자신에 대한 확인 주시기)CASE WHEN [Union1002]='a' THEN (1) ELSE CASE WHEN [Union1002]='b' THEN (2) ELSE NULL END END
- 중첩와 함께, 당신이 볼 수있다.