将 Oracle SQL 查询转换为 Azure SQL 查询

Convert Oracle SQL query to Azure SQL query

我有一个很长的 Oracle SQL 查询需要与 Azure SQL 兼容。我对这两种数据库类型都不熟悉。这是查询:

MERGE INTO studies
    USING dual
    ON (study_id = :study_id)
    WHEN NOT MATCHED THEN
        INSERT (study_id, study_date)
        VALUES (:study_id, :study_date)

我不确定 USING dual 是否可行。我读了一些解决方案,说 SQL 服务器中不需要 USING dual

如果您能解释这个查询的含义以及我如何将其转换为 Azure SQL 查询,我将不胜感激。

这个 Oracle merge 查询只有一个 WHEN NOT MATCHED 子句而没有 WHEN MATCHED,所以基本上就是 insertnot 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服务器确实支持自己的风格或merge statement,其语法不同于Oracle。您可以将 Oracle merge 重写为:

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)