2015-12-14 1466 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

相关问题