Вказує певний в області інструкції MERGE тимчасовий іменований результуючий набір або уявлення, які називаються узагальненим табличним виразом. Результуючий набір, на який посилається інструкція MERGE, є похідним простого запиту. Додаткові відомості див. У розділі WITH обобщенное_таблічное_вираженіе (Transact-SQL).
TOP (expression) [PERCENT]
Вказує кількість або відсоток рядків, які підпадають під цю операцію. Вираз expression може бути або числом, або відсотковою часткою рядків. Рядки, на які посилається вираз TOP, які не розташовані в певному порядку. Додаткові відомості див. У розділі TOP (Transact-SQL).
Ім'я бази даних, в якій розташована таблиця target_table.
Ім'я схеми, якій належить таблиця target_table.
Таблиця або уявлення, з якими виконується зіставлення рядків даних з таблиці
Якщо аргумент target_table є поданням, то всі дії, що виконуються з ним, повинні відповідати умовам для поновлення уявлень. Додаткові відомості див. У розділі Зміна даних через подання.
Таблиця target_table не може бути віддаленою, і для неї не можуть бути визначені правила.
Альтернативне ім'я, яке використовується для вказівки посилань на цю таблицю.
Вказується джерело даних, який зіставляється з рядками даних в таблиці target_table на основі умови
аргументом
Додаткові відомості про синтаксис і аргументах цієї пропозиції см. В розділі FROM (Transact-SQL).
Вказуються умови, при яких таблиця
Важливо вказати тільки ті стовпці з цільової таблиці, які використовуються для пошуку збігів. Іншими словами, необхідно вказати стовпці цільової таблиці, які порівнюються з відповідним стовпцем вихідної таблиці. Не рекомендується підвищувати продуктивність запиту за рахунок фільтрації рядків в цільовій таблиці в реченні ON, як при вказівці AND NOT target_table.column_x = value. Це може привести до отримання непередбачених і невірних результатів.
WHEN MATCHED THEN
Вказується, що всі рядки target_table. які відповідають рядкам, повернутим
Інструкція MERGE може мати трохи більше двох пропозицій WHEN MATCHED. Якщо вказані дві пропозиції, перше речення має супроводжуватися пропозицією AND
WHEN NOT MATCHED [BY TARGET] THEN
Вказує, що рядок вставлена в таблицю target_table для кожного рядка, повернутої виразом
WHEN NOT MATCHED BY SOURCE THEN
Вказується, що всі рядки target_table. які не відповідають рядкам, повернутим
Інструкція MERGE може мати не більше двох пропозицій WHEN NOT MATCHED BY SOURCE. Якщо вказані дві пропозиції, то перше речення має супроводжуватися пропозицією AND
Якщо рядки не повертаються таблицею
Вказується будь-яке дійсне умова пошуку. Додаткові відомості див. У розділі Умова пошуку (Transact-SQL).
Вказується одна або кілька табличних підказок, які застосовуються в цільовій таблиці для кожної операції вставки, оновлення або видалення, які виконуються інструкцією MERGE. Необхідно використовувати ключове слово WITH і круглі дужки.
Використання аргументів NOLOCK і READUNCOMMITTED заборонено. Додаткові відомості про таблиць підказках см. В розділі Табличні підказки (Transact-SQL).
Вказівка підказки TABLOCK для цільової таблиці інструкції INSERT призведе до тих самих наслідків, що і вказівка підказки TABLOCKX. До таблиці буде застосована монопольна блокування. Якщо вказано FORCESEEK, то воно застосовується до явного примірнику цільової таблиці, з'єднаної з вихідною таблицею.
Вказівка READPAST з пропозицією WHEN NOT MATCHED [BY TARGET] THEN INSERT може привести до виконання операцій INSERT, які порушують обмеження UNIQUE.
INDEX (index_val [. N])
Вказується ім'я або ідентифікатор одного або декількох індексів цільової таблиці для виконання явного з'єднання з вихідною таблицею. Додаткові відомості див. У розділі Табличні підказки (Transact-SQL).
Повертає рядок для кожного рядка в target_table. яка оновлюється, вставляється або віддаляється без певного порядку. Додаткові відомості про аргументи цієї пропозиції см. В розділі Пропозиція OUTPUT (Transact-SQL).
OPTION (
Вказує, що для налаштування способу, яким компонент Database Engine обробляє інструкцію, використовуються підказки оптимізатора. Додаткові відомості див. У розділі Підказки в запитах (Transact-SQL).
Вказує дію поновлення або видалення, яке застосовується до всіх рядків target_table. що не відповідає рядкам, які повертаються
UPDATE SET
Вказується список імен стовпців або змінних, які необхідно оновити в цільовій таблиці, і значень, які необхідно використовувати для їх поновлення.
Додаткові відомості про аргументи цієї пропозиції див. Розділ UPDATE (Transact-SQL). Присвоєння змінної того ж значення, що і колонки, не дозволяється.
Вказується, що рядки, що збігаються з рядками в target_table. видаляються.
Вказуються значення для вставки в цільову таблицю.
Список, що складається з одного або декількох стовпців цільової таблиці, в які вставляються дані. Стовпці необхідно вказувати у вигляді однокомпонентного імені, так як в противному випадку інструкція MERGE повертає помилку. Аргумент column_list повинен бути укладений в дужки і розділений комами.
Список з роздільниками-комами констант, змінних або виразів, які повертають значення для вставки в цільову таблицю. Вирази не можуть містити інструкцію EXECUTE.
Заповнює вставлену рядок значеннями за замовчуванням, визначеними для кожного стовпчика.
Додаткові відомості про цю пропозицію см. В розділі Інструкція INSERT (Transact-SQL).
Вказуються умови пошуку, які використовуються для вказівки
Повинно бути вказано принаймні одне з трьох пропозицій MATCHED, але вони можуть бути вказані в будь-якому порядку. В одному реченні MATCHED змінна не може бути оновлена більше одного разу.
На всі операції видалення, вставки або поновлення, зазначені стосовно цільової таблиці інструкції MERGE, поширюються всі обмеження, визначені для цієї таблиці, включаючи всі каскадні обмеження посилальної цілісності. Якщо IGNORE_DUP_KEY має значення ON для всіх унікальних індексів в цільовій таблиці, то в інструкції MERGE цей параметр не враховується.
Щоб використовувати інструкцію MERGE, необхідна крапка з комою (;) як ознака кінця інструкції. Виникає помилка 10713, якщо інструкція MERGE виконується без ознаки кінця конструкції.
Якщо функція @@ ROWCOUNT (Transact-SQL) використовується після інструкції MERGE, вона повертає загальна кількість вставлених, оновлених і видалених рядків з клієнта.
Ключове слово MERGE повністю резервується, якщо рівень сумісності бази даних встановлено на 100. Інструкція MERGE доступна при рівні сумісності 90 і 100, однак це ключове слово в повному обсязі зарезервовано при рівні сумісності 90.
Реалізація тригера
Для кожної операції вставки, оновлення або видалення, зазначеної в інструкції MERGE, SQL Server запускає всі відповідні тригери AFTER, певні для цільової таблиці, але не гарантує певного порядку запуску тригерів. Тригери, які визначені для одного і того ж дії, реалізуються в порядку, зазначеному користувачем. Додаткову інформацію про створення порядку виконання тригерів см. В розділі Вказівка першого і останнього тригерів.
Якщо в цільовій таблиці включений тригер INSTEAD OF для операцій вставки, оновлення або видалення, виконуваних інструкцією MERGE, то потрібно включити тригер INSTEAD OF для всіх операцій, зазначених в інструкції MERGE.
Якщо в таблиці target_table визначені тригери INSTEAD OF UPDATE або INSTEAD OF DELETE, то операції оновлення або видалення не виконуються. Замість цього запускаються тригери, а таблиці inserted і deleted заповнюються відповідним чином.
Якщо в таблиці target_table визначені тригери INSTEAD OF INSERT, то операції вставки не виконуються. Замість цього запускаються тригери, і таблиця inserted заповнюється відповідним чином.