我真的需要知道是否有任何方法可以将表的主键约束更改或删除为UNIQUE约束
当我尝试从Entreprise
表中删除主要约束时:
ALTER TABLE Entreprise
DROP CONSTRAINT PK__Entrepri__AABA1D8F1B0907CE
我收到此错误:
Msg 3725,Level 16,State 0,Line 1
约束'PK_ Entrepri _AABA1D8F1B0907CE'由表'档案'引用,外键约束'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
答案 0 :(得分:2)
您无法使用单个SQL指令自动执行“更改”,但如果您愿意,则可以实现此目的。
首先,您需要在具体情况下删除包含对引用表Enterprise
的引用的表的外键。
您需要从Dossier
删除外键,然后从Enterprise
删除主键,并创建UNIQUE
约束。
另一个问题是,你为什么对这样做感兴趣?
也许你可以阅读other SO thread讨论此事。
答案 1 :(得分:1)
正如建议的错误,您需要先删除外键引用。此不会删除Dossier
中的记录(请参阅我的SQL小提琴example。):
ALTER TABLE Dossier DROP CONSTRAINT Cle_FDOs;
答案 2 :(得分:0)
我多次遇到此问题,最终生成了一个存储过程,该过程可以采用任何主键约束并转换为唯一索引。它将删除并重新创建引用所涉及表的任何内容(这是高度引用表的棘手部分)。
它可以处理多部分主键。
mylist = ['[72.49191836014535]', '[83.83327374257702]', '[72.48327325617225]',
'[66.98897377186994]', '[71.13875892170039]', '[64.3820106481657]',
'[73.28287317220448]', '[79.7119315804787]', '[79.55777844179023]',
'[89.62320741326292]']