2015-12-14 461 views
-2

我是新手在SQL Server.I正在開發一個項目的數據庫,所以我有一箇舊的數據庫和我創建了一個新的現在我正在將舊數據庫中的參數導入到一個新的數據庫中。但是有一些表給我提供了違規密鑰錯誤。我該如何解決這個問題。以下是在該事項上表中的腳本:SQL SERVER,消息2627,級別14,狀態1,行4違反PRIMARY KEY約束

Create Table TabProv 
(

CodProvincia int, 
DescrProvv Char (35), 
DataHorC datetime, 
DataHorA datetime, 
CodOp1 varchar (6), 
CodOp2 varchar(6), 
CONSTRAINT PK_TabProv_CodProv PRIMARY KEY(CodProvincia) 

); 

Create Table TabMunicipio 
(
CodProvincia int, 
CodMunicipio int, 
DescMun char(35) , 
DataHorC datetime, 
DataHorA datetime, 
CodOp1 varchar (6), 
CodOp2 varchar(6), 

CONSTRAINT PK_TabMunicipio_CodMunicipio PRIMARY KEY(CodMunicipio), 
CONSTRAINT FK_TabMunicipio_TabProv FOREIGN KEY(CodProvincia) REFERENCES TabProv(CodProvincia) 

); 

Create Table TabLoca 
(
    CodProvincia int, 
    CodMunicipio int, 
    CodLoc int, 
    DescLoc char(35) , 
    DataHorC datetime, 
    DataHorA datetime, 
    CodOp1 varchar (6), 
    CodOp2 varchar(6), 

    CONSTRAINT PK_TabLoca_CodLoc PRIMARY KEY(CodLoc), 
    CONSTRAINT FK_TabLoca_TabMunicipio FOREIGN KEY(CodMunicipio) REFERENCES TabMunicipio (CodMunicipio), 
    CONSTRAINT FK_TabLoca_Prov FOREIGN KEY(CodProvincia) REFERENCES TabProv (CodProvincia) 


); 

所以創建這個3日消息表之後,我popultaing這個新表DBO,與正坐在舊的數據庫表中的值,表MUNICIPIO作品般的魅力,但表箴給我這個錯誤:

DELETE FROM GESTHANDNET2015v1.dbo.TabMunicipio; 

INSERT INTO GESTHANDNET2015v1.dbo.TabMunicipio([CodMunicipio],[DescMun],[CodOp1],[CodOp2],[DataHorA]) 
SELECT T2.[CODMUN],[DESMUN],[CODOP],[CODOP2],[DATMOD] FROM 
GestHandnet.dbo.TABMUN T2; 

(0 row(s) affected) 
Msg 2627, Level 14, State 1, Line 4 

Violation of PRIMARY KEY constraint 'PK_TabMunicipio_CodMunicipio'. 
Cannot insert duplicate key in object 'dbo.TabMunicipio'. 
The duplicate key value is (1). The statement has been terminated. 

請問我做錯了。

+2

如果你讀**所有的錯誤消息的話**,它闡明瞭相當清楚的,問題是,你試圖插入重複鍵進入TabMunicipio的CodMunicipo列,這樣做違反了主鍵約束。可以清晰多少**您試圖在[此確切表格]中的[確切字段]中插入重複值**是嗎? –

+0

所以感謝馬特,我只想知道至極其中之一被設置爲1.CodProvincia或CodMunicipio?因爲我試圖插入只是其中之一,並錯誤繼續 –

+0

你定義有'約束PK_TabMunicipio_CodMunicipio PRIMARY KEY(CodMunicipio)'這是主鍵,因此'CodMunicipio'是一個有兩個記錄GestHandNet.dbo.TaBMUN.CodMunicipio具有與CodMunicipio的1 – xQbert

回答

1

錯誤信息很清楚。您將具有相同主鍵值的多行插入dbo.TabMunicipio。具體而言,多行,其中CodMunicipio設置爲1

必須有多個排在GestHandnet.dbo.TABMUN其中CODMUN爲1。當你做的INSERT,試圖把多行到dbo.TabMunicipio其中CodMunicipio是1,你您不允許使用您的主鍵約束:

...CONSTRAINT PK_TabMunicipio_CodMunicipio PRIMARY KEY(CodMunicipio), 
1

CodProvincia不是問題。它沒有獨特的約束。 FOREIGN KEY不是一個唯一的約束。問題是CodMunicipio。

很多人想知道哪一個(的1)。不幸的是,SQL不會提供這些信息。如果你不能直接檢查數據,那麼你的選擇是一個沒有唯一限制的鏡像表來查找重複項。

在你插入的情況下,很容易

SELECT T2.[CODMUN], [DESMUN],[CODOP], [CODOP2], [DATMOD] 
    FROM GestHandnet.dbo.TABMUN T2 
WHERE T2.[CODMUN] = 1; 

可以使用IGNORE_DUP_KEY = ON爲它顯示一個錯誤,但繼續插入唯一行。

數據將被截斷的另一個錯誤,這將是很好的知道哪些行(或列)。

+0

馬特,飛盤,肯白,xQbert和Raj更多,非常感謝您的解釋 –

+1

你應該檢查答案。如果你給馬特答案,我沒有問題。但讓人們知道這個問題已經得到解答。 – Paparazzi

相關問題