使用SQL Server 2008将主键约束删除或更改为UNIQUE约束

问题描述 投票:3回答:3

我真的需要知道是否有什么方法可以将表的主键约束更改或删除为UNIQUE约束

[当我尝试从Entreprise表中删除主要约束时:

ALTER TABLE Entreprise
DROP CONSTRAINT  PK__Entrepri__AABA1D8F1B0907CE

我收到此错误:

消息3725,级别16,状态0,第1行表“ Dossier”(外键约束“ Cle_FDO”)正在引用约束“ PK _ Entrepri _ AABA1D8F1B0907CE”。消息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
sql sql-server database sql-server-2008 constraints
3个回答
1
投票
由于错误提示,您需要先删除外键引用。此

将不会删除Dossier中的记录(请参阅我的SQL Fiddle example。):

ALTER TABLE Dossier DROP CONSTRAINT Cle_FDOs;

2
投票
您无法通过一条SQL指令自动进行“更改”,但是您可以根据需要实现。

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

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

另一个问题是,您为什么对此感兴趣?

也许您可以阅读此other SO thread关于此事的讨论。


0
投票
我多次遇到这个问题,最终生成了一个存储过程,该过程可以采用任何主键约束并变成唯一索引。它将删除并重新创建引用所涉及表的任何内容(这是高度引用表的棘手部分)。
© www.soinside.com 2019 - 2024. All rights reserved.