簡體   English   中英

我的第一個問題-違反PRIMARY KEY約束

[英]My first question — Violation of PRIMARY KEY constraint

我遇到以下問題:我想執行一個腳本,在其中嘗試將我還原的數據庫(iNode-8-24-14-Orig)中的數據插入到我創建的數據庫中。

代碼是:

/****************************************************/
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]
GO
SET IDENTITY_INSERT [dbo].[XHQ_HIER_DEF] OFF;
GO
/****************************************************/

但我得到每個表此錯誤:

違反主鍵約束'XPKXHQ_HIER_DEF'。 無法在對象'dbo.XHQ_HIER_DEF'中插入重復的密鑰。 重復鍵值為(1)。

知道我該如何解決嗎? 我想提到的是,兩個數據庫中的表和列都相同。 我知道我在說我已經在使用相同的主鍵,但是我不知道如何解決它。

這是我在本網站上的第一個問題。

我們在乎...為什么?

任何想法我該如何解決?

讀取錯誤,修復數據? 該錯誤非常清楚地說明了問題所在:

無法在對象'dbo.XHQ_HIER_DEF'中插入重復的密鑰。

不要多次插入相同的鍵值。 期。 如果將字段定義為主鍵,則每個定義中的值在鍵中都是唯一的。

已經有一個標識為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
/****************************************************/

警告:這種刀片的性能可能特別糟糕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM