将 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
,所以基本上就是 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服务器确实支持自己的风格或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)
我有一个很长的 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
,所以基本上就是 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服务器确实支持自己的风格或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)