我的第一个问题-违反PRIMARY KEY约束

时间:2019-01-17 13:33:45

标签: sql sql-server tsql sql-insert

我遇到以下问题:我想执行一个脚本,在该脚本中尝试将我还原的数据库(iNode-8-24-14-Orig)中的数据插入到我创建的数据库中。

代码是:

app.exe

但是我得到每个表的错误:

  

违反PRIMARY KEY约束“ XPKXHQ_HIER_DEF”。无法插入   对象“ dbo.XHQ_HIER_DEF”中的重复键。重复的键值为   (1)。

任何想法我该如何解决?我想提到的是,两个数据库中的表和列都相同。我知道我在说我已经在使用相同的主键,但是我不知道如何解决它。

2 个答案:

答案 0 :(得分:2)

  

这是我对此网站的第一个问题。

我们在乎...为什么?

  

任何想法我该如何解决?

读取错误,修复数据?该错误非常清楚地说明了问题所在:

  

无法在对象'dbo.XHQ_HIER_DEF'中插入重复的密钥。

请勿多次插入相同的键值。期。如果您将字段定义为主键,则每个定义中的值在键中都是唯一的。

已经有一个标识为1的条目,或者您的源数据有多个具有相同值的行,这对于您的数据模型而言无效。

通常对于此类问题,实际读取错误会有所帮助。在您的情况下,描述中完全清楚出了问题所在,甚至为您提供了引起问题的值:

  

重复的键值为(1)。

答案 1 :(得分:1)

解决方案很明显:请勿插入重复的主键值。

根据我的推测,

  1. 您正在将MSSQL与链接服务器一起使用
  2. PK仅由HIER_KEY字段组成

所以:

/****************************************************/
SET IDENTITY_INSERT [dbo].[XHQ_HIER_DEF] ON;
GO
INSERT INTO [dbo].[XHQ_HIER_DEF]
        ([HIER_KEY]
        ,[HIER_NAME]
        ,[HIER_DESC]
        ,[SYNONYM_DEF_LEVEL]
        ,[CRT_XHQUSERID]
        ,[CRT_TIMESTAMP]
        ,[CRT_TZ_BIAS]
        ,[UPDT_XHQUSERID]
        ,[UPDT_TIMESTAMP]
        ,[UPDT_TZ_BIAS])
SELECT [HIER_KEY]
    ,[HIER_NAME]
    ,[HIER_DESC]
    ,[SYNONYM_DEF_LEVEL]
    ,[CRT_XHQUSERID]
    ,[CRT_TIMESTAMP]
    ,[CRT_TZ_BIAS]
    ,[UPDT_XHQUSERID]
    ,[UPDT_TIMESTAMP]
    ,[UPDT_TZ_BIAS]
FROM [iNode-8-24-14-Orig].[dbo].[XHQ_HIER_DEF] T1 
WHERE NOT EXISTS(
    SELECT 1 FROM [dbo].[XHQ_HIER_DEF] T2 
        WHERE 
        T1.HIER_KEY = T2.HIER_KEY
)
GO
SET IDENTITY_INSERT [dbo].[XHQ_HIER_DEF] OFF;
GO
/****************************************************/

警告:这样插入的性能可能特别是很糟糕。