Использование оператора MERGE в SQL Server для INSERT и UPDATE
Оператор MERGE
в SQL Server позволяет одновременно выполнять операции INSERT
, UPDATE
и DELETE
на одной или нескольких таблицах в зависимости от условий. Это полезно, когда нужно синхронизировать данные между двумя таблицами.
Синтаксис оператора MERGE
MERGE
В операторе MERGE
SQL Server условия определяют, как данные из источника сопоставляются с данными в целевой таблице и какие действия предпринимать. Вот более подробное описание различных условий:
1. WHEN MATCHED
WHEN MATCHED
Это условие срабатывает, когда строки из целевой таблицы (target
) и строки из таблицы источника (source
) совпадают по условию ON
. В этом блоке можно выполнять следующие действия:
UPDATE: Обновляет существующие записи в целевой таблице.
2. WHEN NOT MATCHED BY TARGET
WHEN NOT MATCHED BY TARGET
Это условие срабатывает, когда строки из таблицы источника (source
) не имеют соответствующих строк в целевой таблице (target
). Это можно использовать для вставки новых записей.
INSERT: Вставляет новые записи в целевую таблицу, которые есть в таблице источника, но отсутствуют в целевой таблице.
3. WHEN NOT MATCHED BY SOURCE
WHEN NOT MATCHED BY SOURCE
Это условие срабатывает, когда строки из целевой таблицы (target
) не имеют соответствующих строк в таблице источника (source
). Это можно использовать для удаления устаревших записей.
DELETE: Удаляет записи из целевой таблицы, которые отсутствуют в таблице источника.
Примеры использования
Пример 1: Обновление существующих записей и вставка новых
Предположим, у вас есть таблица сотрудников (Employees
) и таблица обновлений (EmployeeUpdates
), и вам нужно обновить существующих сотрудников и добавить новых.
В этом примере:
Если
EmployeeID
совпадает в обеих таблицах, происходит обновление данных вEmployees
.Если
EmployeeID
есть вEmployeeUpdates
, но нет вEmployees
, происходит вставка новой записи.
Пример 2: Удаление старых записей из целевой таблицы
Если вы хотите также удалить записи из таблицы назначения, которые отсутствуют в таблице источника, можно добавить условие WHEN NOT MATCHED BY SOURCE
.
Пример 3: Использования всех условий вместе
Предположим, у вас есть две таблицы: Employees
и EmployeeUpdates
. Вам нужно обновить существующие записи, вставить новые записи и удалить те записи в Employees
, которые отсутствуют в EmployeeUpdates
.
В этом примере:
WHEN MATCHED
обновляет существующих сотрудников.WHEN NOT MATCHED BY TARGET
добавляет новых сотрудников.WHEN NOT MATCHED BY SOURCE
удаляет сотрудников, которых нет в таблицеEmployeeUpdates
.
Эти условия позволяют гибко управлять данными в целевой таблице в зависимости от состояния данных в таблице источника.
Last updated