如何在 MSSQL 中对多列进行唯一约束


create table tImprumuturi
(
     ID_Imprumut int identity primary key,
     DataImprumut date default getdate(),
     DataScadenta as (dateadd(day,2,DataImprumut)) persisted,
     CodCD char(10) foreign key references tCD(CodCd)not null,
     CodCV char(10) foreign key references tCaseteVideo(CodCaseta),
     CodAb char(10) foreign key references tAbonati(CodAbonat) not null,
     CONSTRAINT ucCodes UNIQUE (CodCD,CodCV,CodAb)
)
我不想拥有许多相同的CodCD或CodCV或CodAb,

但绝不希望拥有相同的CodCD和CodCV和CodAb的两张记录。如您所见,我的代码位于顶部,即使我有指令CONSTRAINT ucCodes UNIQUE (CodCD,CodCV,CodAb),它仍然允许我插入两个或多个具有相同 CodCD 和 CodCV 和 CodAb 的记录。下面你可以看到我的记录

insert into tImprumuturi(CodCV,CodCD,CodAb)
values('CV21','CD20','ab9')
insert into tImprumuturi(CodCV,CodCD,CodAb)
values('CV21','CD19','ab9')
alter table  tImprumuturi add unique index(CodCD, CodCV, CodAb);

添加唯一约束的另一种方法是显式创建唯一索引:

create unique index tImprumuturi_CodCD_CodCV_CodAb on tImprumuturi(CodCD, CodCV, CodAb);

您也可以直接在 create table 语句中执行此操作:

create table . . .
    constraint unique(CodCD, CodCV, CodAb)
    . . .

它们在功能上都等效于 alter table 语句。 我碰巧更喜欢显式索引创建。

编辑:

您的问题仍然不清楚您想要的独特之处。 如果希望各个值不重复,请在每个值上创建一个单独的唯一索引:

create unique index tImprumuturi_CodCD_CodCV_CodAb on tImprumuturi(CodCD);
create unique index tImprumuturi_CodCD_CodCV_CodAb on tImprumuturi(CodCV);
create unique index tImprumuturi_CodCD_CodCV_CodAb on tImprumuturi(CodAb);

最新更新