sql - 更改数据库行的主键值

标签 sql sql-server ssms

我正在使用 SQL Server Management Studio,我想使用不同的值更改表行的自动增量主键值。当然,打开表进行编辑后,SQL Server Management Studio 会将所有行的该字段显示为灰色。

这可能吗?我想使用我们错误删除的行号,因此它是有效的(与其他主键值没有冲突)并且 - 最重要的是 - 在数据库中添加的下一行应该具有完整的自动递增值。

谢谢。

编辑:丢失与此 PK 上其他表记录的链接对于该行来说不是问题。我们可以手动恢复。

最佳答案

不一定推荐,但请在要更改数字的行中插入一个副本,但要包含所需的 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

<小时/>

为了方便后代,为了澄清下面评论中的问题,只有当您插入大于当前最大值的值时,自动增量值才会受到影响。

引用链接文章:

If the value inserted is larger than the current identity value for the table, SQL Server automatically uses the new inserted value as the current identity value.

关于sql - 更改数据库行的主键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18888973/

相关文章:

sql-server - 在 sql 中强制 unicode 字符串

sql-server - 如何在 SQL Server Management Studio 中订购项目解决方案内容

sql - 对 SQL Server 表的行数设置限制

sql - 一旦表被删除,索引会发生什么?

mysql - 如何通过多对多关系从 SQL 获取中排除具有相关关键字的行

sql - 连续的 WITH 子句

mysql - SQL,使用数学将行转换为列

mysql - SQL 基于时间戳差异计算ON Multi table with multi condition - MySQL

sql-server - 插入到具有而不是来自实体数据框架的触发器的表中时出错

sql - 俄语、德语和阿拉伯语使用哪种排序规则