sql-server - 将 Oracle SQL 查询转换为 Azure SQL 查询
问题描述
我有一个相当长的 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
会起作用。我读了一些解决方案,说这USING dual
在 SQL Server 中是不必要的。
如果您能解释此查询的含义以及我如何将其翻译为 Azure SQL 查询,我将不胜感激。
解决方案
这个 Oraclemerge
查询只有一个WHEN NOT MATCHED
子句和 no WHEN MATCHED
,所以基本上就是insert
and 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 不同。您可以将 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)
推荐阅读
- yaml - Python Ruamel YAML 使用别名和合并键加载注释
- sql - 与依赖数据一起删除 SQL (Access) 中的查询?
- javascript - 从 2 个数组中获取唯一数字,第一个方法有效,第二个无效,为什么?
- excel - 提高循环速度
- javascript - 在 src 更改时,即使 src 无效
- html - 退出悬停后下拉菜单消失
- kubernetes - 删除应用 Helm2.13.1 创建的所有 Pod
- r - ggplot geom_bar 按组为 0 值留下空格
- sql - 使用分析函数时的分组
- python - 捕获图像并提交给kivy python中的其他功能