达梦空格填充导致违反唯一约束问题排查及处理
在oracle迁移到达梦过程中,创建主键提示违法唯一约束。如下所示:

用户反馈没有重复数据

原因是达梦空格填充模式参数(BLANK_PAD_MODE)为0 , 查询语句将忽略字符串的后缀空格,由于大部分其他都已经迁移过去,只有个别表报错,不能重新初始化实例,需要将有问题的数据查找出来删除
查找重复数据
SELECT A.NAME ,COUNT(*) N FROM (SELECT TRIM(NAME) NAME FROM TEST)A GROUP BY A.NAME ORDER BY N DESC;

还有一种是ROW_NUMBER() OVER 函数查找重复数据
select * from
(SELECT name,row_Number() over(partition by name ORDER by 1 desc)rn from test
) t where t.rn>1

将上面的重复字段随便找一条看下字段长度区别

根据rowid来删除重复数据
delete from test where rowid in (select rowid from
(SELECT name, row_Number() over(partition by name ORDER by 1 desc)rn from test
) t where t.rn>1)
删除之后,查看以前的重复数据值,可以看到只有一台数据了

重复值删除之后,能成功创建主键

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了