사례 대 허슬 대 합체


9

SQL Server 2012 시험에 대한 설명서를 읽고 있는데 다음 사항을 확인했습니다.

사례 대 허슬 대 합체

이제는 각각을 사용하는 방법 을 알고 있지만 각각을 사용하는 시점 을 모르겠습니다 . 어떤 몸은 분명히 할 수 있습니다. 감사.

추신. 시험 문제에 대한 태그가 있습니까?


2
COALESCE당신은 자신을 작성 CASE하는 CASE진술 에서 분명히 확장 되지만 WHEN조건 에서 더 유연 할 수 있습니다 . 들어 ISNULLCOALESCE 관련 / 중복?
Martin Smith

관련 동의합니다. 그러나 멍청이. 댓글 주셔서 감사합니다 :)
Stuart Blackler

답변:


10

ISNULL -SQL Server에서만 사용 가능합니다. NULL 값을 서로 테스트하고 대체 할 수 있습니다.

COALESCE -ANSI 표준 가변 길이 인수 세트에서 널 (NULL) 값을 널이 아닌 첫 번째 값으로 테스트하고 대체 할 수 있습니다. 데이터 유형 우월성은 이것에 영향을 미칩니다.

-- Conversion failed when converting the varchar value 'a' to data type int
SELECT COALESCE(CAST(NULL AS varchar(10)), 'a', 1) 
-- Returns 1
SELECT COALESCE(CAST(NULL AS varchar(10)), 1, 'a')

위의 예에서 'a'는 널이 아닌 첫 번째 값이지만 문자 데이터는 정수보다 우선 순위가 낮습니다.

ISNULL과 COALESCE 간의 또 다른 고려 사항은 ISNULL의 결과는 NOT NULL로 결정되는 반면 COALESCE 호출의 결과는 NULL입니다. JRJ의 포스트 ISNULL () <> COALESCE () 참조 사소한 것처럼 보일 수 있지만 쿼리 최적화 프로그램은 열의 Null 허용 여부에 따라 다른 계획을 세울 수 있습니다.

dmo sys.dm_exec_describe_first_result_set를 통해 isull / coalesce / case 식을 실행하여 Null 허용 여부를 쉽게 테스트 할 수 있습니다.

-- these all evaluate to not nullable (is_nullable = 0) because I'm not clever enough
DECLARE @sql nvarchar(4000) = N'
SELECT ISNULL(NULL, 1) AS I
, COALESCE(NULL, 1) AS C
, CASE WHEN NULL = NULL THEN NULL ELSE 1 END AS C1
'
SELECT
    DMO.*
FROM
    sys.dm_exec_describe_first_result_set(@sql, NULL, 0) AS DMO

CASE -ANSI 표준 스칼라 함수도 있습니다. 간단한 스칼라로 표현할 수없는 테스트를 받았을 때 이전 두 가지에 대해 CASE를 사용하는 것을 보았지만 꽤 약한 대답입니다.


완전한 답변을 주셔서 감사합니다. 나는 우선 순위가 중요하다는 것을 몰랐다 COALESCE. 다시 한번 감사드립니다
Stuart Blackler

1
CASE기술적으로는 함수가 아니라 표현입니다.
ypercubeᵀᴹ

1

ISNULL은 1 개의 보상을 반환 할 가능성을 제공합니다. COALESCE는 하나의 값으로 제한되지 않습니다. 예를 들어 COALESCE(v1,v2,v3,v4,v5) V5가 NULL이 아닌 유일한 값인 경우 반환됩니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.