2017-01-20 72 views
0

我有一個查詢插入記錄在表中。該表的主鍵列是自動遞增的標識字段。查詢的選擇部分將會有重複,但是我在ignore_dup_key = on字段(city_nm,prov_en_nm)上有一個唯一的約束,它應該在插入時跳過它們。這用於正常工作,但由於某種原因,現在它給了我這個信息。這是我第一次嘗試它,因爲數據庫從2012年的SQL服務器移動到2014年,如果可以產生影響違反主鍵約束插入查詢不觸及PK列

Violation of PRIMARY KEY constraint 'Dim_city_province_country_pk'. Cannot insert duplicate key in object 'HD_DtlClm.dim_city_province_country_t'. The duplicate key value is (###). (where ### is an ID, a different one every time I run it) 

這是查詢。

INSERT INTO HD_DtlClm.[dim_city_province_country_t] (
    city_nm, prov_en_nm, prov_fr_nm, contry_fr_nm, contry_en_nm 
    ) 
SELECT gr_mbr_city_nm, PROV_ENG_NM, PROV_FR_NM, CONTRY_ENG_NM, CONTRY_FR_NM 
FROM isu.gr_dentl_clm_v 
    LEFT JOIN HD_DtlClm.province_information_t 
    ON gr_dentl_clm_v.gr_mbr_prov_cd = HD_DtlClm.province_information_t.PROV_CLM_CD 
UNION 
SELECT gr_prvdr_city_nm, PROV_ENG_NM, PROV_FR_NM, CONTRY_ENG_NM, CONTRY_FR_NM 
FROM isu.gr_dentl_clm_v 
    LEFT JOIN HD_DtlClm.province_information_t 
    ON gr_dentl_clm_v.gr_prvdr_prov_cd IN (HD_DtlClm.province_information_t.PROV_ENG_CD, HD_DtlClm.province_information_t.PROV_CLM_CD) 

任何想法,爲什麼我得到這個錯誤,我沒有得到過去?

EDIT添加主密鑰創建腳本:

ALTER TABLE [HD_DtlClm].[dim_city_province_country_t] ADD CONSTRAINT [Dim_city_province_country_pk] PRIMARY KEY CLUSTERED 
( [cpc_key] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,  IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
GO 

EDIT2添加表創建腳本

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [HD_DtlClm].[dim_city_province_country_t](
    [cpc_key] [int] IDENTITY(1,1) NOT NULL, 
    [city_nm] [char](50) NOT NULL, 
    [prov_en_nm] [char](50) NULL, 
    [prov_fr_nm] [char](50) NULL, 
    [contry_en_nm] [char](75) NULL, 
    [contry_fr_nm] [char](75) NULL, 
    [create_ts] [datetime] NOT NULL, 
    [update_ts] [datetime] NOT NULL, 
CONSTRAINT [Dim_city_province_country_pk] PRIMARY KEY CLUSTERED 
(
    [cpc_key] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], 
CONSTRAINT [dim_city_province_country_ak1] UNIQUE NONCLUSTERED 
(
    [city_nm] ASC, 
    [prov_en_nm] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = ON, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 

ALTER TABLE [HD_DtlClm].[dim_city_province_country_t] ADD DEFAULT (getdate()) FOR [create_ts] 
GO 

ALTER TABLE [HD_DtlClm].[dim_city_province_country_t] ADD DEFAULT (getdate()) FOR [update_ts] 
GO 
+2

你能否提供'Dim_city_province_country_pk'的create語句。重現錯誤的示例記錄也會有所幫助。 –

+0

添加了創建腳本,不知道您對重現錯誤的示例記錄的含義 – Traceur

+0

您可以添加表創建腳本嗎? – SqlZim

回答

1

嘗試運行:DBCC CHECKIDENT( 'HD_DtlClm [dim_city_province_country_t]。');查看消息選項卡&中返回的結果,確保當前標識值等於或高於當前列值。注意運行它甚至可以解決問題本身。

要展開:看起來像有什麼東西補種您的身份列,所以將插入造成重複被拾起。不要以爲歷史上有什麼方法可以檢查什麼改變了它;最有可能的候選者是具有RESEED選項的DBCC CHECKIDENT命令或TRUNCATE操作(將重新設置爲原始值)。