【问题标题】:SQL Server 2008 State:23000,Code:2627,Error:Violation of PRIMARY KEYSQL Server 2008 状态:23000,代码:2627,错误:违反主键
【发布时间】:2015-02-20 09:14:45
【问题描述】:

我有一个数据库,其中有一个表 mediainteraction,有 10 条记录:1 到 10

我从另一个表导入数据,现在它有 20 条记录:11 到 20

当系统尝试创建新记录时,我收到此错误:

状态:23000,代码:2627,错误:违反主键约束 'pk120_mediainteraction_pkey'。无法在对象中插入重复键 'dbo.mediainteraction'。重复键值为 (11)。

似乎系统正在尝试使用 pkey 11 而不是 21 创建新记录。

【问题讨论】:

  • 您是在利用主键字段的自动播种还是在该列上强制插入?您的插入查询是什么样的?
  • 您能否向我们展示一下表结构以及您是如何尝试插入新行的?
  • 我的查询:插入destination.dbo.mediainteraction (pkey,field1....fieldn) select pkey,field1..fieldn from source.dbo.mediainteraction
  • 您要从原始表中选择然后插入到同一个表中?没有,正如您在下面提到的,在您的 PK 列上自动递增值?
  • 你好。不是他同桌。两个同名但位于不同服务器的表。

标签: sql-server sql-server-2008 constraints primary-key unique-constraint


【解决方案1】:

该表可能填充了快速加载 - 保持身份选项,或者使用了此子句:

SET IDENTITY_INSERT table ON

这导致表接受来自另一个表的标识值,而不是创建自己的值。因此表的当前标识低于现有值,添加新行会导致此错误。

检查当前身份:

DBCC CHECKIDENT ('mediainteraction', NORESEED)

使用以下方法解决问题:

DBCC CHECKIDENT ('mediainteraction')

或指定自己当前的身份值留出空隙:

DBCC CHECKIDENT ('mediainteraction', RESEED, 100)

【讨论】:

  • 检查身份时我收到:消息 7997,级别 16,状态 1,第 1 行“媒体交互”不包含身份列。
猜你喜欢
  • 2014-08-12
  • 2019-12-03
  • 2021-04-11
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多