[英]How can I create a unique constraint on my column (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)
,它仍然允許我插入兩個或多個具有相同CodCD
和CodCV
和CodAb
。 在下面可以看到我的記錄
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.