Вы можете использовать оба этих метода, но есть различия:
SELECT ISNULL(col1, 0 ) FROM table1
SELECT COALESCE(col1, 0 ) FROM table1
Сравнение COALESCE () и ISNULL ():
Функция ISNULL и выражение COALESCE имеют сходную цель, но могут вести себя по-разному.
Поскольку ISNULL является функцией, она оценивается только один раз. Как описано выше, входные значения для выражения COALESCE могут оцениваться несколько раз.
Определение типа данных результирующего выражения отличается. ISNULL использует тип данных первого параметра, COALESCE следует правилам выражения CASE и возвращает тип данных значения с наивысшим приоритетом.
Обнуляемость выражения результата различна для ISNULL и COALESCE. Возвращаемое значение ISNULL всегда считается NOT NULLable (при условии, что возвращаемое значение является ненулевым), тогда как COALESCE с ненулевыми параметрами считается NULL. Таким образом, выражения ISNULL (NULL, 1) и COALESCE (NULL, 1), хотя их эквиваленты, имеют разные значения обнуляемости. Это имеет значение, если вы используете эти выражения в вычисляемых столбцах, создаете ключевые ограничения или делаете возвращаемое значение скалярного UDF-детерминированного, чтобы его можно было проиндексировать, как показано в следующем примере.
- Этот оператор не выполняется, потому что PRIMARY KEY не может принимать значения NULL - и обнуляемость выражения COALESCE для col2 - оценивается как NULL.
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0) PRIMARY KEY,
col3 AS ISNULL(col1, 0)
);
- Это утверждение успешно выполнено, потому что обнуляемость функции - ISNULL оценивается как NOT NOT NULL.
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 принимает только 2 параметра, тогда как COALESCE принимает переменное количество параметров.
Если вам нужно узнать больше, вот полный документ из MSDN.