Bu yöntemlerin her ikisini de kullanabilirsiniz, ancak farklılıklar vardır:
SELECT ISNULL(col1, 0 ) FROM table1
SELECT COALESCE(col1, 0 ) FROM table1
COALESCE () ve ISNULL () karşılaştırılması:
ISNULL işlevi ve COALESCE ifadesi benzer bir amaca sahiptir, ancak farklı davranabilir.
ISNULL bir işlev olduğundan, yalnızca bir kez değerlendirilir. Yukarıda tarif edildiği gibi, COALESCE ifadesi için giriş değerleri birden çok kez değerlendirilebilir.
Ortaya çıkan ifadenin veri türü belirlemesi farklıdır. ISNULL, ilk parametrenin veri türünü kullanır; COALESCE, CASE ifade kurallarına uyar ve en yüksek önceliğe sahip veri türünü döndürür.
Sonuç ifadesinin NULL edilebilirliği ISNULL ve COALESCE için farklıdır. ISNULL dönüş değeri her zaman NOT NULLable olarak kabul edilir (dönüş değerinin null olmayan bir değer olduğu varsayılarak), null olmayan parametrelerle COALESCE null olarak kabul edilir. Dolayısıyla, eşdeğer olmasına rağmen ISNULL (NULL, 1) ve COALESCE (NULL, 1) ifadeleri farklı nulllability değerlerine sahiptir. Bu ifadeleri hesaplanan sütunlarda kullanıyorsanız, anahtar kısıtlamaları oluştururken veya bir skaler UDF'nin dönüş değerini aşağıdaki örnekte gösterildiği gibi dizine eklenmesi için belirleyici yaparsanız, bu bir fark yaratır.
PRIMARY KEY, NULL değerleri kabul edemediğinden ve col2 için COALESCE ifadesinin geçersiz olması NULL olarak değerlendirildiğinden, bu ifade başarısız olur.
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0) PRIMARY KEY,
col3 AS ISNULL(col1, 0)
);
- Bu ifade başarılı olur, çünkü - ISNULL işlevinin nullability AS NOT NULL olarak değerlendirilir.
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0),
col3 AS ISNULL(col1, 0) PRIMARY KEY
);
ISNULL ve COALESCE doğrulamaları da farklıdır. Örneğin, ISNULL için bir NULL değeri int değerine dönüştürülürken, COALESCE için bir veri türü sağlamanız gerekir.
ISNULL sadece 2 parametre alırken COALESCE değişken sayıda parametre alır.
daha fazla bilgi için burada msdn tam belge .