无法更新标识列 SQL Server 2014 [重复]

Posted

技术标签:

【中文标题】无法更新标识列 SQL Server 2014 [重复]【英文标题】:Cannot update identity column SQL Server 2014 [duplicate] 【发布时间】:2017-02-10 04:22:13 【问题描述】:

我正在尝试更新 Identity 列,但它目前不存在于任何关系表中。

如果我运行如图所示的 SQL 语句:

SET IDENTITY_INSERT Client..dt_Domain ON;

UPDATE Client..dt_Domain
SET DomainID = 1
WHERE DomainID = 2 AND ClientID = 3

SET IDENTITY_INSERT Client..dt_Domain OFF;

我收到以下错误:

消息 8102,第 16 级,状态 1,第 6 行 无法更新标识列“DomainID”。

【问题讨论】:

@JamesZ 我在发布此问题之前看到了该解决方案,但这对我不起作用。 这个答案有什么特别之处?因为它是正确的(也是唯一真正的方法)。如果您的表中没有 DomainID = 1 的内容,则插入所有 DomainID 为 1 的相同值并删除其中 DomainID = 2... @ZLK 如果我尝试以Msg 8102, Level 16, State 1, Line 6# # Cannot update identity column 'DomainID'. 上的缩进方式插入,我会收到相同的错误 @ZLK 插入记录然后删除它是最后的解决方案,如果没有任何效果:) 您可以使用SET IDENTITY_INSERT... ON 帮助将显式值INSERT 插入标识列 - 但您可以从不更新 标识列中的现有值.没有机制,没有 hack,没有“解决方法”——只是无法完成。 【参考方案1】:

我想没有办法Update Identity 列。

但是,您可以通过将IDENTITY_INSERT 设置为 ON 来删除旧记录并使用所需的身份号码插入相同的记录

【讨论】:

我尝试了插入,但它也以同样的信息告终。因此,我添加了记录,然后考虑更新它。但现在我又卡住了。 您的插入是否违反了任何约束,例如唯一键或主键? @AaBa DomainID 是 PK,ClientID 是 FK,其余表中没有键。 @AaBa 有可能已经有DomainID = 1的记录 不,没有 ID 为 1 的行。无论如何,我采取了一种驴式方法并继续前进,因为我需要修复另外 8 个像这样的表。呸!感谢您的时间@Shakeer

以上是关于无法更新标识列 SQL Server 2014 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server修改标识列方法(备忘)

SQL Server 2008 - 返回连接条目和“无法绑定多部分标识符”错误的用户定义函数

sql sever中怎么把已有数据的列改为标识列?

如何在 SQL Server 中重新设置标识列?

还原后的 SQL Server 2012 标识列

SQL Server 错误:“无法为标识列插入显式值”,即使我 SET IDENTITY_INSERT ON