2012-09-04 64 views
3

我真的需要知道是否有什么办法可以更改或删除表的主键约束UNIQUE约束删除或使用SQL Server 2008

当我尝试将主键约束变为UNIQUE约束从Entreprise表中删除的主要约束:

ALTER TABLE Entreprise 
DROP CONSTRAINT PK__Entrepri__AABA1D8F1B0907CE 

我得到这个错误:

消息3725,级别16,状态0,第1行
约束'PK_ Entrepri _AABA1D8F1B0907CE'被表'Dossier',外键约束'Cle_FDOs'引用。
消息3727,级别16,状态0,行1
无法删除约束。查看以前的错误。

所以,问题是我不希望在dossier

删除行这是Entreprise表:

create table Entreprise 
(
    ID_Entreprise integer , 
    Raison_Social varchar(100),/*Nom Entreprise*/ 
    Num_Raison_Sociale varchar(20) unique , 
    Adress varchar(100), 
    Abreviation varchar(10), 
    CNSS_Entreprise integer unique, 
    Eligible varchar(20),/*AUTOMATIQUE par raport aux CNSS_Entreprise*/ 
    Effectif integer,/*NB SALARIE*/ 
    Ville varchar(20), 
    Responsable varchar(20), 
    EMAIL_Responsable varchar(20), 
    Tel_Responsable varchar(20), 
    Fax_Responsable varchar(20),  
    Directeur varchar(20), 
    EMAIL_Directeur varchar(20), 
    Tel_Directeur varchar(20), 
    Fax_Directeur varchar(20), 
    RIB varchar(60),/*ici non sur le dossier lo*/ 
    Nom_Giac varchar(50) foreign key references GIAC(Nom_Giac), 
    primary key(Nom_Giac,ID_Entreprise) 
) 
GO 

,这是Dossier表:

create table Dossier 
(
    ID_Dossier integer primary key, 
    ID_Entreprise int,/*AUTOMATIQE par rapotrt aux la cnss de l'entreprise qui l'a donne*/ 
    Date_Depot datetime , 
    Type_Etude varchar(2),/*DS IF combobox*/ 
    Dernier_Type varchar(2),/* AUTOMATIQUE */ 
    Eligibile varchar(3),/* par raport aux Dernier Type et CNSS et COTISTAION EXERCICES */ 
    Fiche_Information varchar(3),/*checkbox o/n */ 
    Buletin_Adhesion varchar(3), 
    Fiche_Renseignment varchar(3), 
    Attestation varchar(3), 
    Date_Debut datetime, 
    Date_Fin datetime, 
    --Etat_Dossier varchar(3), /* hado m7aydine mn war9a*/ 
    --Motif text,/*en cas de rejet, peu prendre null apart le cnss et cotisation ex et dernier formation *//* hado m7aydine mn war9a*/ 
    ID_Cabinet integer foreign key references Cabinet(ID_Cabinet), 
    Montant_Demander decimal(6,2), 
    Duree integer, 
    Porcentage_Taux varchar(3), /* combobox 70% 80% */ 
    Nom_Giac varchar(50), 
    constraint Cle_FDOs foreign key(Nom_Giac,ID_Entreprise) references Entreprise(Nom_Giac,ID_Entreprise), 
) 
GO 

回答

1

由于错误提示,您需要删除外键参考第一。在Dossier不会删除的记录(见我的SQL小提琴example):

ALTER TABLE Dossier DROP CONSTRAINT Cle_FDOs; 
+0

您@ X-Zero –

2

你不能这样做了“变化”自动,用一个简单的SQL指令,但你可以做到这一点,如果你想。

首先,您需要删除包含对引用表Enterprise的引用的那些表的外键在具体的情况下。

您需要从Dossier中删除外键,然后从Enterprise中删除主键,并创建一个UNIQUE约束。

另一个问题是,为什么你有兴趣这样做?

也许你可以读这个other SO thread讨论此事。

+2

+1并删除* FK约束*不会删除行! –

+1

@Luis Quijada –