SQL Server 2012 시험에 대한 설명서를 읽고 있는데 다음 사항을 확인했습니다.
사례 대 허슬 대 합체
이제는 각각을 사용하는 방법 을 알고 있지만 각각을 사용하는 시점 을 모르겠습니다 . 어떤 몸은 분명히 할 수 있습니다. 감사.
추신. 시험 문제에 대한 태그가 있습니까?
SQL Server 2012 시험에 대한 설명서를 읽고 있는데 다음 사항을 확인했습니다.
사례 대 허슬 대 합체
이제는 각각을 사용하는 방법 을 알고 있지만 각각을 사용하는 시점 을 모르겠습니다 . 어떤 몸은 분명히 할 수 있습니다. 감사.
추신. 시험 문제에 대한 태그가 있습니까?
답변:
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
. 다시 한번 감사드립니다
CASE
기술적으로는 함수가 아니라 표현입니다.
COALESCE
당신은 자신을 작성CASE
하는CASE
진술 에서 분명히 확장 되지만WHEN
조건 에서 더 유연 할 수 있습니다 . 들어ISNULL
대COALESCE
관련 / 중복?