ISNULL - hanya tersedia di SQL Server. Mengizinkan pengujian dan penggantian nilai NULL dengan satu sama lain.
COALESCE - standar ANSI. Mengizinkan pengujian dan penggantian nilai NULL dengan nilai non-nol pertama dalam serangkaian panjang variabel. Penting untuk dicatat bahwa faktor-faktor prioritas tipe data menjadi hal ini
-- 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')
Dalam contoh di atas, 'a' adalah nilai non-nol pertama tetapi data karakter memiliki prioritas lebih rendah daripada integer.
Pertimbangan lain antara ISNULL vs COALESCE adalah resultan dari ISNULL yang ditentukan untuk TIDAK NULL sedangkan hasil dari panggilan COALESCE adalah NULLable. Lihat posting JRJ ISNULL () <> COALESCE () Meskipun itu mungkin hal yang sepele, pengoptimal kueri dapat membuat rencana yang berbeda berdasarkan pada ketidakmungkinan kolom.
Anda dapat dengan mudah menguji nullability ekspresi isnull / coalesce / case Anda dengan menjalankannya melalui dmo sys.dm_exec_describe_first_result_set
-- 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 - Juga fungsi skalar standar ANSI. Saya akan melihat menggunakan CASE selama dua sebelumnya ketika saya memiliki tes yang tidak dapat diungkapkan dalam skalar sederhana tapi itu jawaban yang cukup lemah, saya akui.
COALESCEdiperluas keCASEtetapi jelas dalamCASEpernyataan yang Anda tulis sendiri Anda bisa lebih fleksibel dalamWHENkondisi. UntukISNULLvsCOALESCEterkait / duplikat?