更改数据库行的主键值
Posted
技术标签:
【中文标题】更改数据库行的主键值【英文标题】:Changing primary key value for a database row 【发布时间】:2013-09-19 07:47:50 【问题描述】:我正在使用 SQL Server Management Studio,我想使用不同的值更改表行的自动递增主键值。 SQL Server Management Studio 在打开表格进行编辑后,当然会将此字段的所有行显示为灰色。
有可能吗?我想使用我们错误删除的行数,因此它是有效的(与其他主键值没有冲突)并且 - 最重要的是 - 添加到数据库中的下一行应该具有完整的自动递增值。
谢谢。
编辑:丢失与此 PK 上其他表记录的链接对于这一行来说不是问题。我们可以手动恢复。
【问题讨论】:
不要使用主键作为无间隙排名数字或类似的东西。 @juergend 你不能强调这一点。我建议这应该是答案! 我需要为业务数据库快速恢复这种情况。如果您推荐不同的设计方法,我很感激,但这并不能解决我的问题。 选择临时表中的记录-更新临时表以修复顺序-删除并创建原始表-在新表中插入临时表中的记录 您不能更新IDENTITY
列的值 - 如果确实必须,您只能在 INSERT
上显式设置它。
【参考方案1】:
不一定推荐,但是,在您想要更改数字的行中插入一份副本,但带有您需要的 ID:
SET IDENTITY_INSERT aTable ON
GO
-- Attempt to insert an explicit ID value of 3
INSERT INTO aTable (id, product) VALUES(3, 'blah')
GO
SET IDENTITY_INSERT aTable OFF
GO
然后删除您不想要的编号所在的行(在您更新任何 FK 引用之后)。
更多详情:http://technet.microsoft.com/en-us/library/aa259221(v=sql.80).aspx
为了后代,为了澄清下面评论中的问题,只有当您插入一个大于当前最大值的值时,自动增量值才会受到影响。
引用链接文章:
如果插入的值大于当前标识值 表中,SQL Server 自动使用新插入的值作为 当前身份值。
【讨论】:
它适用于我的数据库表的备份副本!这会影响下一个自动增量值吗?如果不是,这就是我正在寻找的解决方案!以上是关于更改数据库行的主键值的主要内容,如果未能解决你的问题,请参考以下文章
javaWeb_JDBC_JDBC获取数据库自动生成的主键值