我有一个包含外键的表" columnA"列和另外一列" columnB"。我想阻止在" columnB"中添加相同的值。但仅限于" columnA" ...
中的相同值columnA columnB
1 'a'
1 'a' - this is not allowed
2 'a' - this is allowed
从我的角度来看,唯一的方法是使用触发器,但我认为有一种更好,更优雅的方式来实现这种约束。你知道制作这种逻辑的最佳方法吗?
答案 0 :(得分:1)
唯一约束可行。
alter table TableName add constraint UQ_consrtaint unique(columnA, columnB);
应该这样做。
答案 1 :(得分:0)
看起来你需要像这样创建一个主键:
DECLARE @DataSource TABLE
(
[A] TINYINT
,[B] CHAR
,PRIMARY KEY([A], [B])
);
INSERT INTO @DataSource ([A], [B])
VALUES (1, 'a'); -- ok
INSERT INTO @DataSource ([A], [B])
VALUES (2, 'a'); -- ok
INSERT INTO @DataSource ([A], [B])
VALUES (1, 'a'); -- error
它会给你以下错误:
Ms 2627,Level 14,State 1,Line 14违反PRIMARY KEY 约束'PK __#B1CFBEC__D86D1834E734E52B'。无法插入重复 对象'dbo。@ DataSource'中的键。重复键值为(1,a)。
在上面的案例中。
或两列的唯一约束:
DECLARE @DataSource TABLE
(
[A] TINYINT
,[B] CHAR
,UNIQUE ([A], [B])
);
答案 2 :(得分:0)
ALTER TABLE tablename ADD UNIQUE uniqueconstraintname(columnA, columnB);