2016-09-30 863 views
0

我是SSIS的新手,我收到一條錯誤消息。誰能幫助我?我的數據中沒有重複項我正在使用ssis,我得到這個錯誤「違反PRIMARY KEY約束。不能在對象中插入重複鍵值。重複鍵值是

錯誤消息是 OLE DB記錄可用來源:「Microsoft SQL Server Native Client 11.0」Hresult:0x80040E2F描述:「違反PRIMARY KEY約束'PK_DimCourse'。不能在對象'dbo.DimCourse'中插入重複鍵。重複的鍵值是(CS1301)。「

我現在的表看起來像這樣

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[DimCourse](
    [CourseCode] [nvarchar](10) NOT NULL, 
    [SubjectCode] [nvarchar](10) NOT NULL, 
    [CourseNumber] [nvarchar](10) NOT NULL, 
    [CourseTitle] [nvarchar](50) NOT NULL, 
    [Level1] [nvarchar](20) NOT NULL, 
    [Level2] [nvarchar](20) NOT NULL, 
CONSTRAINT [PK_DimCourse] PRIMARY KEY CLUSTERED 
(
    [CourseCode] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
+1

錯誤消息是非常明顯的你試圖插入重複值到你的主鍵列'CourseCode' –

+1

沒有重複 – Nick

+0

@Nick你確定你沒有處理重複。你必須考慮表中存在的值以及你想要插入到表中的值。因此,如果您的ssis使用查詢作爲源,您確定行沒有被連接條件或其他東西重複。或者,也許CS1301存在於目標表和試圖插入它的源表中?錯誤只有1意味着有重複的數據。 – Matt

回答

0

與CourseCode =‘CS1301’已經存在於目標和相同CourseCode將通過SSIS中插入一條記錄從源代碼導致重複

要麼你的目標不包含CourseCode ='CS1301',但你的源數據包含兩行都具有相同的CourseCode。通過插入重複到目標環境將也導致重複。

我會建議查詢您的源數據CourseCode ='CS1301',看看你是否找到兩行。如果只有一行,請查詢CourseCode ='CS1301'的目標數據。如果還有一行,比較並根據情況可能需要刪除其中的一個。

2

我知道我爲時已晚,無法回答。我得到了類似的錯誤信息,發現了什麼問題,並解決了它。我希望它能幫助未來的讀者。

場景:

  1. 我有一個源表dbo.Codes與主鍵 組合(代碼ID,代號)。
  2. 爲了創建我的目的地 表,我已經使用了SQL Server - >數據庫 - >任務 - >生成 腳本,選項。
  3. 然後,在SSIS包中,我只使用了OLE DB Source和OLE DB Destination元素。它返回 錯誤:「違反PRIMARY KEY約束'pkCodes'。不能在對象'dbo.Codes'中插入 重複鍵。重複鍵值爲 (106,da7A)。」。

我試圖解決:

  1. 我曾嘗試使用SQL命令來源:Select CodeID, CodeName from dbo.Codes GROUP BY CodeID, CodeName。它仍然返回錯誤。我在這一點上感到困惑。
  2. 在網上搜索後,我發現了一個提示,在OLE DB Source和OLE DB Destination之間添加SSIS Toolbox - > Common - > Sort元素。我在Sort元素中選中了「刪除具有重複排序值的行」選項。我仍然遇到錯誤。
  3. 然後,我啓用了OLE DB Source和Sort元素之間的數據查看器。我可以看到源表中有兩行:106,da7a和106,da7A。

真正的問題是什麼?

我的源表coulmn CodeName區分大小寫,但目標表中的我的CodeName列不區分大小寫。發生這種情況是因爲,sql server生成腳本選項,默認情況下,腳本歸類設置爲false。

解決方案,爲我工作:

我重新創建我的劇本整理選項目標表:是的,這使我的目標列大小寫敏感的,它解決了我的問題。

相關問題