Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Новое на сайте
Новое

Инструкция MERGE

Инструкция MERGE напоминает инструкцию CASE в DML. Она объединяет инструкции UPDATE и INSERTS одну, сохраняющую функциональность обеих.

По существу, инструкция MERGE проверяет записи в таблице-источнике и целевой таблице. Если записи существуют в обеих таблицах, то эта инструкция на основе заранее заданных условий обновляет записи в целевой таблице записями, взятыми из таблицы-источника. Если в целевой таблице не оказывается записей, которые есть в таблице-источнике, то они вставляются в целевую таблицу. Инструкция MERGE появилась в версии SQL 2003 стандарта ANSI.

Помните, что при выполнении операций сравнения строк с использованием предложения LIKE значимыми являются все символы строки, включая начальные и конечные пробелы.


Синтаксис SQL 2003

MERGE INTO {имя_объекта | подзапрос} [[AS] alias] USING ссылка_на_таблицу [[AS]

псевдоним] ON условия_поиска WHEN MATCHED

THEN UPDATE SET столбец={выражение | DEFAULT} [, …] WHEN NOT MATCHED

THEN INSERT [(столбец [, …])] VALUES (выражение [, …])


Ключевые слова

MERGE INTO {имя_объекта | подзапрос}

Объявляется целевой объект для операции слияния. Целевой объект может представлять собой таблицу или представление с возможностью обновления (с именем имяобъекта) или может быть подзапросом, создающим вложенную таблицу.

[AS] alias

Указывается необязательный псевдоним для целевой таблицы.

USING ссылка_на_таблицу

Указывается источник для операции слияния: таблица, представление или подзапрос.

ON условия_поиска

Указывается условие или условия, по которым оценивается совпадение таблицы источника и целевой таблицы. Синтаксис по существу тот же, что и для предложения ON инструкции JOIN. Например, при слиянии записей, взятых из таблицы newhireemp, с таблицей emp может выглядеть следующим образом: ON emp.emp_id=new_hire_emp.emp_id.

WHEN MATCHED THEN UPDATE SET столбец={выражение DEFAULT} [, …]

Объявляется, что если запись из таблицы-источника совпадает с записью из целевой таблицы (по условию условие_поиска), то происходит обновление одного или нескольких указанных столбцов значениями, определяемыми выражением.

WHEN NOT MATCHED THEN UPDATE SET столбец={выражение | DEFAULT}}, …]

Объявляется, что если запись из таблицы-источника не совпадает с записью из целевой таблицы (по условию условие_поиска), то происходит обновление одного или нескольких указанных столбцов значениями, определяемыми выражением.


Общие правила

Правила использования инструкции MERGE достаточно просты.

  • Предложения WHEN MATCHED и WHEN NOT MATCHED являются обязательными, но их нельзя указывать несколько раз.
  • Целевая таблица может представлять собой стандартную обновляемую таблицу, обновляемое представление или обновляемый подзапрос.
  • Если ссылка_на_таблицу представляет собой подзапрос, заключайте его в скобки.
  • Предложение условие_поиска не должно содержать ссылок на пользовательские функции и хранимые процедуры.
  • Предложение условие_поиска может содержать несколько элементов, которые разделяются операторами AND или OR.
  • Если в предложении WHEN NOT MATCHED опущен список столбцов, то будет подразумеваться полный список всех столбцов целевой таблицы с их обычным порядковым расположением.
  • Другие правила использования инструкции MERGE самоочевидны. Например, столбцы, упоминаемые в предложении WHEN MATCHED, должны быть обновляемыми.

Источник