如何添加依赖于外键值的唯一约束?

时间:2015-08-21 05:52:49

标签: sql sql-server tsql

我有一个包含外键的表" columnA"列和另外一列" columnB"。我想阻止在" columnB"中添加相同的值。但仅限于" columnA" ...

中的相同值
columnA  columnB 
 1        'a'       
 1        'a' - this is not allowed  
 2        'a' - this is allowed

从我的角度来看,唯一的方法是使用触发器,但我认为有一种更好,更优雅的方式来实现这种约束。你知道制作这种逻辑的最佳方法吗?

3 个答案:

答案 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);