Ответ 1
Нет эквивалента DUPLICATE KEY UPDATE, но MERGE и WHEN MATCHED могут работать для вас
В MySQL, если вы укажете ON DUPLICATE KEY UPDATE и вставлена строка, которая приведет к дублированию значения в индексе UNIQUE или PRIMARY KEY, выполняется UPDATE старой строки. Например, если столбец a объявлен как UNIQUE и содержит значение 1, следующие два оператора имеют одинаковый эффект:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
UPDATE table SET c=c+1 WHERE a=1;
Не думаю, что я столкнулся с чем-либо подобным в T-SQL. Предлагает ли SQL Server что-либо сопоставимое с MySQL ON DUPLICATE KEY UPDATE?
Нет эквивалента DUPLICATE KEY UPDATE, но MERGE и WHEN MATCHED могут работать для вас
Я был удивлен, что ни один из ответов на этой странице не содержал пример фактического запроса, поэтому здесь вы:
Более сложный пример вставки данных, а затем обработки дубликатов
MERGE
INTO MyBigDB.dbo.METER_DATA WITH (HOLDLOCK) AS target
USING (SELECT
77748 AS rtu_id
,'12B096876' AS meter_id
,56112 AS meter_reading
,'20150602 00:20:11' AS local_time) AS source
(rtu_id, meter_id, meter_reading, time_local)
ON (target.rtu_id = source.rtu_id
AND target.time_local = source.time_local)
WHEN MATCHED
THEN UPDATE
SET meter_id = '12B096876'
,meter_reading = 56112
WHEN NOT MATCHED
THEN INSERT (rtu_id, meter_id, meter_reading, time_local)
VALUES (77748, '12B096876', 56112, '20150602 00:20:11');
SQL Server 2008 имеет эту функцию как часть TSQL.
См. Документацию по инструкции MERGE здесь - http://msdn.microsoft.com/en-us/library/bb510625.aspx
В SQL Server 2000 есть понятие вместо триггеров, которое может выполнить желаемую функциональность, хотя будет неприятный спусковой механизм, скрывающийся за кулисами.
Проверьте раздел "Вставить или обновить?"
http://msdn.microsoft.com/en-us/library/aa224818(SQL.80).aspx