Denne Oracle merge
forespørgslen har kun en WHEN NOT MATCHED
klausul og ingen WHEN MATCHED
, så grundlæggende er det insert
og 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)
Dette svarer logisk til den originale Oracle-forespørgsel.
Med hensyn til dit oprindelige spørgsmål:SQL Server understøtter sin egen smag eller merge
erklæring
, hvis syntaks er anderledes end Oracle. Du ville omskrive Oracles merge
som:
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)