vakaya karşı isnull ve birleşmeye karşı


9

Sadece SQL Server 2012 sınavları için belgeleri okuyorum ve aşağıdaki noktayı gördüm:

vakaya karşı isnull ve birleşmeye karşı

Şimdi, biliyorum NASIL her birini kullanmak ama bilmiyorum ZAMAN her birini kullanmak. Lütfen bazı bedenler açıklığa kavuşturabilir. Teşekkürler.

Ps. Lütfen sınav soruları için bir etiket alabilir miyiz?


2
COALESCEgenişletilmiş CASEancak açık bir şekilde CASEkendinizi yazdığınız bir WHENşartta daha esnek olabilirsiniz . For ISNULLvs COALESCE ilgili / çoğaltmak?
Martin Smith

ilgili katılıyorum. ama dup değil. Yorum için teşekkürler :)
Stuart Blackler

Yanıtlar:


10

ISNULL - yalnızca SQL Server'da kullanılabilir. NULL değerinin birbiriyle test edilmesine ve değiştirilmesine izin verir.

COALESCE - ANSI standardı. Değişken uzunluktaki bir argüman kümesinde NULL değerinin ilk null olmayan değerle test edilmesine ve değiştirilmesine izin verir. Veri türü öncelik faktörlerinin buna

-- 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')

Yukarıdaki örnekte, 'a' null olmayan ilk değerdir, ancak karakter verilerinin tamsayıdan daha düşük önceliği vardır.

ISNULL ve COALESCE arasındaki bir diğer husus, bir COALESCE çağrısının sonucu NULLable iken ISNULL sonucunun NULL DEĞİL olduğu belirlenir. Bkz. JRJ'nin gönderisi ISNULL () <> COALESCE () Bu önemsiz bir şey gibi görünse de, sorgu optimize edici bir sütunun kuralsızlığına bağlı olarak farklı planlar yapabilir.

İsnull / coalesce / case ifadelerinizin geçersizliğini dmo sys.dm_exec_describe_first_result_set ile çalıştırarak kolayca test edebilirsiniz.

-- 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 - Ayrıca bir ANSI standart skaler işlevi. Basit bir skalerde ifade edilemeyen bir testim olduğunda CASE'i önceki ikisine göre bakardım ama bu oldukça zayıf bir cevap, itiraf ediyorum.


Bu kadar çabuk cevap verdiğiniz için teşekkürler. Öncelik sırasının önemli olduğu hakkında hiçbir fikrim yoktu COALESCE. Tekrar teşekkürler
Stuart Blackler

1
CASEteknik olarak bir işlev değil, bir ifadedir.
ypercubeᵀᴹ

1

ISNULL size 1 repalcement döndürme imkanı verir, COALESCE bir değerle sınırlı değildir, örneğin COALESCE(v1,v2,v3,v4,v5) V5 NULL DEĞİL olan tek Değer ise, döndürülür

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.