Това merge на Oracle заявката има само WHEN NOT MATCHED клауза и без WHEN MATCHED , така че основно това е insert и not exists :
insert into studies(study_id, study_date)
select x.*
from (values(@study_id, @study_date)) as x(study_id, study_date)
where not exists (select 1 from studies s1 where s1.study_id = x.study_id)
Това е логически еквивалентно на оригиналната заявка на Oracle.
Що се отнася до първоначалния ви въпрос:SQL Server поддържа свой собствен вариант или merge изявление
, чийто синтаксис е различен от Oracle. Вие бихте пренаписали merge на Oracle като:
merge studies as s
using (values(@study_id, @study_date)) as x(study_id, study_date)
on (s.study_id = x.study_id)
when not matched
then insert (study_id, study_date) values(x.study_id, x.study_date)