Ви можете використовувати обидва ці методи, але існують відмінності:
SELECT ISNULL(col1, 0 ) FROM table1
SELECT COALESCE(col1, 0 ) FROM table1
Порівнюючи COALESCE () та ISNULL ():
Функція ISNULL та вираз COALESCE мають подібне призначення, але можуть поводитися по-різному.
Оскільки ISNULL є функцією, вона оцінюється лише один раз. Як описано вище, вхідні значення для виразу COALESCE можна оцінити кілька разів.
Визначення типу отриманого виразу відрізняється. ISNULL використовує тип даних першого параметра, COALESCE дотримується правил вираження CASE і повертає тип даних значення з найвищим пріоритетом.
NULLability результату вираження різна для ISNULL та COALESCE. Значення повернення ISNULL завжди вважається НЕ нульовим (якщо припустити, що значення повернення є нульовим), тоді як COALESCE з ненульовими параметрами вважається NULL. Таким чином, вирази ISNULL (NULL, 1) та COALESCE (NULL, 1), хоча еквівалентні, мають різні значення зведеності. Це має значення, якщо ви використовуєте ці вирази в обчислених стовпцях, створюючи ключові обмеження або роблячи зворотне значення скалярного UDF детермінованого, щоб його можна було індексувати, як показано в наступному прикладі.
- Цей випадок не вдається, оскільки ПЕРВИЧНИЙ КЛЮЧ не може прийняти значення NULL - а зведеність виразу COALESCE для col2 - оцінюється на NULL.
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0) PRIMARY KEY,
col3 AS ISNULL(col1, 0)
);
- Це твердження є успішним, оскільки зведена нанівець функція - ISNULL оцінюється як НЕ НУЛЬНА.
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0),
col3 AS ISNULL(col1, 0) PRIMARY KEY
);
Валідації ISNULL та COALESCE також різні. Наприклад, значення NULL для ISNULL перетворюється на int, тоді як для COALESCE потрібно вказати тип даних.
ISNULL приймає лише два параметри, тоді як COALESCE приймає змінну кількість параметрів.
якщо вам потрібно більше дізнатися ось повний документ від msdn.