Как использовать T-SQL MERGE в этом случае?

Я новичок в команде T-SQL MERGE, поэтому я нашел место в своей логике SQL, где я могу ее использовать, и хочу протестировать ее, но не могу понять, как именно мне ее использовать:

IF (EXISTS (SELECT 1 FROM commissions_history WHERE request = @requestID))
    UPDATE commissions_history
    SET amount = @amount
    WHERE request = @requestID
ELSE
    INSERT INTO commissions_history (amount) VALUES @amount)

Пожалуйста, предложите правильное использование. Спасибо!


person abatishchev    schedule 03.06.2010    source источник


Ответы (2)


Вы смотрели в помощь? Вот простой пример:

MERGE dbo.commissions_history AS target
USING (SELECT @amount, @requestID) AS source (amount, request)
ON (target.request = source.request)
WHEN MATCHED THEN
    UPDATE SET amount = source.amount
WHEN NOT MATCHED THEN
    INSERT (request, amount)
    VALUES (source.request, source.amount);
person Tom H    schedule 03.06.2010
comment
Вот простой пример вашего простого примера :) stackoverflow.com/a/10219581/261997 - person RThomas; 19.04.2012

Я надеюсь, что это сработает

MERGE commissions_history AS target
USING (SELECT request FROM  commissions_history WHERE request = @requestID) AS source (request)
ON (target.request = source.request)
WHEN MATCHED THEN 
    UPDATE SET amount = @amount
WHEN NOT MATCHED BY SOURCE    
    INSERT (request, amount)
    VALUES (@requestID,  @amount)
person a1ex07    schedule 03.06.2010
comment
Часть вставки не будет работать, потому что ваш исходный выбор вернет пустой набор записей, который затем попытается объединить - person Tom H; 03.06.2010
comment
В обновлении source.amount берется из таблицыcommisions_history, но должен быть из переменной @Amount. - person Shannon Severance; 03.06.2010
comment
@Tom H, @Shannon Severance: Спасибо за комментарии. Я изменил его. Во всяком случае, Том Х более понятен. - person a1ex07; 03.06.2010