繁体   English   中英

如何在SQL Server 2008(R2)中的更多列上添加唯一约束?

[英]How to add an unique constraint on more columns in SQL Server 2008 (R2)?

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 AND CodCV和CodAb。 如您所见,我的代码位于顶部,即使我有CONSTRAINT ucCodes UNIQUE (CodCD,CodCV,CodAb)指令CONSTRAINT ucCodes UNIQUE (CodCD,CodCV,CodAb) ,它仍然允许我插入两个或多个具有相同CodCDCodCVCodAb 在下面可以看到我的记录

insert into tImprumuturi(CodCV,CodCD,CodAb)
values('CV21','CD20','ab9'),
      ('CV21','CD19','ab9')
CONSTRAINT ucCodes UNIQUE (CodCD, CodCV, CodAb) 

上面对这三个值设置了唯一约束,就好像它们是一个值一样。

这意味着以下将起作用:

set values('a', 'b', 'c'),
          ('a', 'b', 'd')

并且以下操作将失败:

set values('a', 'b', 'c'),
          ('a', 'b', 'c')

编辑

为了回应您的评论,您可以执行以下操作:

CONSTRAINT ucCodCD UNIQUE (CodCD, CodCV) 
CONSTRAINT ucCodCV UNIQUE (CodCD, CodAb) 
CONSTRAINT ucCodAb UNIQUE (CodCV, CodAb)

这意味着以下将起作用:

set values('a', 'b', 'c'),
          ('a', 'd', 'e')

并且以下操作将失败:

set values('a', 'b', 'c'),
          ('a', 'b', 'd')

它的工作方式与您在表中定义的完全相同。 由于您已对CodCV,CodCD,CodAb的组合创建了约束,因此此处('CV21','CD20','ab9')和('CV21','CD19','ab9')将被视为唯一。 (CodCD的值不同)。 也许您应该尝试创建2个单独的唯一约束,如下所示:

CONSTRAINT ucCod_CD UNIQUE (CodCD) 
CONSTRAINT ucCod_CV UNIQUE (CodCV) 
CONSTRAINT ucCod_Ab UNIQUE (CodAb)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM