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.
COALESCE
genişletilmişCASE
ancak açık bir şekildeCASE
kendinizi yazdığınız birWHEN
şartta daha esnek olabilirsiniz . ForISNULL
vsCOALESCE
ilgili / çoğaltmak?