为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:
从mysql迁移到达梦,有大量的ON DUPLICATE KEY UPDATE,有没有好的方法迁移过来。
https://eco.dameng.com/community/article/7fcb37c12911ea8267dd9052632d8a0e
MERGE INTO sys_user T1
USING (
<foreach collection="list" item="item" index="index" separator="UNION ALL">
SELECT #{item.id} id,#{item.userName} user_name,#{item.realName} real_name,#{item.deptId} dept_id,#{item.roleId} role_id,#{item.password} password
FROM dual
</foreach>
) T2 ON (T1.user_name = T2.user_name) <!-- 根据唯一约束 user_name 来更新 -->
<!-- ) T2 ON (T1.id = T2.id) --> <!-- 这里就是根据主键 id 来更新 -->
WHEN NOT MATCHED THEN INSERT(id, user_name, real_name,dept_id,role_id,password)
VALUES (T2.id, T2.user_name, T2.real_name, T2.dept_id, T2.role_id, T2.password)
<!-- 更新这几个字段的值 -->
WHEN MATCHED THEN UPDATE SET T1.real_name = T2.real_name,T1.dept_id = T2.dept_id,T1.role_id = T2.role_id,T1.password = T2.password
WITH source_data AS (
<foreach collection="list" item="item" separator="UNION ALL">
SELECT #{item.id} AS id, #{item.value} AS value FROM DUAL
</foreach>
)
MERGE INTO target_table t
USING source_data s
ON (t.id = s.id)
WHEN MATCHED THEN
UPDATE SET t.value = s.value
WHEN NOT MATCHED THEN
INSERT (id, value)
VALUES (s.id, s.value);
ON DUPLICATE KEY UPDATE为Mysql特有语法,可能只有通过改写sql的方式进行迁移