Функция COALESCE в сочетании с INSERT и UPDATE

Функция COALESCE в SQL Server используется для возврата первого не NULL значения из списка переданных аргументов. Это особенно полезно в сочетании с операциями INSERT и UPDATE, когда нужно обеспечить корректное обновление данных даже при наличии NULL значений.

Синтаксис функции COALESCE

COALESCE(expression1, expression2, ..., expressionN)

Функция возвращает первое значение, которое не является NULL. Если все значения NULL, то возвращается NULL.

Примеры использования

Пример 1: Использование COALESCE при вставке данных

Предположим, у вас есть таблица сотрудников с возможными пустыми значениями в полях Phone и Address. Вы хотите вставить данные в таблицу, заменяя NULL значения на стандартные значения.

-- Создание таблицы
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    Name NVARCHAR(100),
    Phone NVARCHAR(20),
    Address NVARCHAR(255)
);

-- Вставка данных с использованием COALESCE для замены NULL значений
INSERT INTO Employees (EmployeeID, Name, Phone, Address)
VALUES 
(1, 'Alice', COALESCE(NULL, 'Unknown'), COALESCE('123 Main St', 'No Address Provided')),
(2, 'Bob', COALESCE('555-1234', 'Unknown'), COALESCE(NULL, 'No Address Provided'));

В этом примере:

  • Для Phone и Address, если значение NULL, будет использоваться значение по умолчанию.

  • Вставляемые строки будут иметь значения Phone и Address, указанные через COALESCE.

Пример 2: Использование COALESCE при обновлении данных

Предположим, что вам нужно обновить существующие записи в таблице сотрудников, при этом новые значения могут быть NULL. Вы хотите обновить только те поля, которые содержат непустые значения.

-- Таблица сотрудников
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    Name NVARCHAR(100),
    Phone NVARCHAR(20),
    Address NVARCHAR(255)
);

-- Обновление данных с использованием COALESCE
UPDATE Employees
SET 
    Phone = COALESCE(@NewPhone, Phone),
    Address = COALESCE(@NewAddress, Address)
WHERE EmployeeID = @EmployeeID;

В этом примере:

  • Если @NewPhone содержит NULL, то в поле Phone будет оставлено текущее значение из таблицы.

  • То же самое для поля Address.

Использование COALESCE с параметрами в T-SQL

COALESCE также можно использовать в более сложных запросах и процедурах, чтобы обрабатывать входные параметры или значения в запросах.

DECLARE @NewPhone NVARCHAR(20) = NULL;
DECLARE @NewAddress NVARCHAR(255) = '456 Elm St';

-- Обновление данных с использованием COALESCE
UPDATE Employees
SET 
    Phone = COALESCE(@NewPhone, Phone),
    Address = COALESCE(@NewAddress, Address)
WHERE EmployeeID = 1;

В этом примере:

  • Если @NewPhone равен NULL, поле Phone останется без изменений.

  • @NewAddress содержит новое значение, поэтому поле Address будет обновлено.

Функция COALESCE позволяет вам гибко обрабатывать NULL значения, гарантируя, что данные будут обновлены корректно, даже если новые значения отсутствуют.

Last updated