Неправильный синтаксис около ключевого слова 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.[Время прибытия])