Неправильный синтаксис около ключевого слова ON - SQL

Есть следующий запрос (на самом деле он больше, но я сократил):

INSERT INTO DBName.[ТСГрафик] 
                        ([Код], [Код КА], [Время прибытия]) VALUES (37, '978475', '22:30') ON DUPLICATE KEY UPDATE [Код] = VALUES([Код), [Код КА] = VALUES([Код КА]), [Время прибытия] = VALUES([Время прибытия]);

Выдает сообщение "Неправильный синтаксис около ключевого слова ON". Нужно сделать массовый Update. Подскажите что не так с запросом?


Ответы (1 шт):

Автор решения: Герман Борисов

В SQL, не в расширениях синтаксиса от разных СУБД, а именно в стандарте SQL нет такого синтаксиса. Стандартный механизм - MERGE.

Вот ссылка на документацию по MERGE в реализации от Microsoft: https://docs.microsoft.com/ru-ru/sql/t-sql/statements/merge-transact-sql?view=sql-server-ver15

MERGE INTO DBName.[ТСГрафик] AS A
USING (
  SELECT 37 AS [Код], '978475' AS [Код КА], '22:30' AS [Время прибытия]
) AS B
ON A.[Код] = B.[Код]
WHEN MATCHED THEN UPDATE SET
  [Код КА] = B.[Код КА],
  [Время прибытия] = B.[Время прибытия]
WHEN NOT MATCHED THEN INSERT ([Код], [Код КА], [Время прибытия])
  VALUES (B.[Код], B.[Код КА], B.[Время прибытия])
→ Ссылка