синтаксис для одной строки ОБЪЕДИНЯЕТСЯ / upsert в SQL Server

Я пытаюсь сделать, одна строка вставляет/обновляет на таблице, но все примеры там для наборов.

Может любой фиксировать мой синтаксис:

MERGE member_topic ON mt_member = 0 AND mt_topic = 110
WHEN MATCHED THEN UPDATE SET mt_notes = 'test'
WHEN NOT MATCHED THEN INSERT (mt_member, mt_topic, mt_notes) VALUES (0, 110, 'test')

Разрешение на marc_s состоит в том, чтобы преобразовать одну строку в подзапрос - который заставляет меня думать, что команда MERGE действительно не предназначается для одной строки upserts.

MERGE member_topic
USING (SELECT 0 mt_member, 110 mt_topic) as source
ON member_topic.mt_member = source.mt_member AND member_topic.mt_topic = source.mt_topic
WHEN MATCHED THEN UPDATE SET mt_notes = 'test'
WHEN NOT MATCHED THEN INSERT (mt_member, mt_topic, mt_notes) VALUES (0, 110, 'test');
62
задан Jacob 21 March 2010 в 05:48
поделиться

1 ответ

По сути, вы на правильном пути - но вам не хватает источника, из которого вы хотите объединить данные - попробуйте что-то вроде этого:

MERGE 
   member_topic AS target
USING 
   someOtherTable AS source
ON 
   target.mt_member = source.mt_member 
   AND source.mt_member = 0 
   AND source.mt_topic = 110
WHEN MATCHED THEN 
   UPDATE SET mt_notes = 'test'
WHEN NOT MATCHED THEN 
   INSERT (mt_member, mt_topic, mt_notes) VALUES (0, 110, 'test')
; 

Нет специального синтаксиса для одной строки MERGE - все, что вам нужно нужно использовать правильное предложение. С этим правильным условием в предложении ON вы можете ограничить источник одной строкой - без проблем.

И не забывайте конечную точку с запятой! Шутка ли - это важно!

См. это сообщение в блоге , где можно найти действительно хорошее вступление к MERGE .

46
ответ дан 24 November 2019 в 16:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: