簡體   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