如何在2列上设置唯一约束 - 一列映射到另一列的不同值

时间:2014-12-07 12:51:24

标签: sql sql-server ssms

所以我有一张这样的表:

Internal ID | SAP ID  | . . . 
------------+---------+
1           | 254     | . . .
2           | 5       | . . .
2           | 5       | . . .
3           | 8       | . . .

如您所见,每个不同的内部ID始终只有一个SAP ID 例如,您不能使用以下内容添加另一个条目:

Internal ID | SAP ID  | . . .
------------+---------+
2           | 6       | . . .

因为2已经映射到5所以说一个人不应该进入上面的例子。

如何设置这样的约束?

2 个答案:

答案 0 :(得分:1)

你的桌子结构不好。您允许表中的重复行,但仅在某些情况下。相反,您应该在两个ID之间有一个不允许重复的映射表:

create table InternalIds (
    InternalId int not null primary key,
    SAPId int
);

这几乎解决了这个问题,因为每个内部id只允许一个行。我将此作为一个单独的表,但如果您愿意,可以将该列添加到现有表中。

然后,当您想要给定内部ID的特定 SAP ID时,只需查找它。

答案 1 :(得分:-1)

您应该使用COMPOSITE KEY约束。要设置约束,请使用示例查询

ALTER TABLE dbo.testRequest
ADD CONSTRAINT PK_TestRequest 
PRIMARY KEY (Internal ID, SAP ID)