【发布时间】:2023-02-06 23:49:10
【问题描述】:
我在数据库中有一个这样的表: ID、姓名、Val、Pos。
01,ValueN1,10,0
01,ValueN2,5,1
01,ValueN3,6,2
01,ValueN4,7,3
01,ValueN5,10,4
我需要添加一个值:01,ValueN6,10,3
Pos 列是一个键,所以我需要重写所有值(我想)。我需要的结果是:
01,ValueN1,10,0
01,ValueN2,5,1
01,ValueN3,6,2
01,ValueN6,10,3
01,ValueN4,7,4
01,ValueN5,10,5
有一种方法?如果我简单地添加值,我会得到重复键错误,因为 pos=3 已经存在。
【问题讨论】:
-
您将需要
UPDATE所有行后行,然后更改其位置,然后INSERT值。您需要确保在事务中执行此操作,以便在出现错误时可以回滚整个操作。 -
虽然,如果
Pos是钥匙那么我建议它不是一个好的候选者; (主)键的值不应该改变,否则保持参照完整性将成为一场噩梦。 -
这将引起关注,一个钥匙不需要更改以适应新行。
-
如果
Pos是一个(主)键,它是否被任何外键约束引用?如果是这样,那么这就变成了一个巨大的蠕虫罐头。 -
我需要添加行但具有特定的 pos 值。 Pos 不是主键。
标签: sql sql-server