在数据库中,我们有一个像
这样的表此处序列是唯一键,它基本上显示UI中行的位置。现在我需要通过将C2序列更改为1并将C1序列更改为2来将C2的位置更改为C1。同样,我可以重新排列序列,并且我能够重新排列内存中列表的序列。
正如我之前所说,序列是数据库中的唯一键(我使用的是oracle数据库)所以当我尝试提交批量更新查询时,它显示唯一键约束错误。我在下面列出了一些解决方案。
解决方案1
禁用唯一键约束并更新序列,然后为表启用唯一键。
解决方案2:
示例:
我们必须将C2移至C1位置,以便我们更新
解决方案3
将C2的序列更新为-1
将C1的序列更新为-2
休息所有序列也应修改为C2到-3
C4 o -4
然后提交更改并再次将所有序列更新为(序列)*( - 1) 再次提交更改。
解决方案4
我们也可以从数据库中删除这两行,然后使用重新排列的序列再次添加它。
这是我所拥有的四种解决方案,但这三种解决方案都不适合性能预期。请建议我解决这个问题的最有效方法。我正在使用C#和oracle
答案 0 :(得分:0)
我认为更新现有行的唯一键值是错误的方法。反之亦然,并更新其余列。 e.g。
merge into yourtab f
using (-- exchange values of seq 1 and 2
select 1 seq, 'C2' code, '1.2' name
from dual
union all
select 2, 'C1', '1.1'
from dual) src
on (f.seq = src.seq)
when matched then
update set code = src.code, name = src.name;
btw我不明白为什么你需要更新seq以重新排序UI中的列表,为什么不简单地按order by
子句重新排序?