所以我有一张这样的表:
Internal ID | SAP ID | . . .
------------+---------+
1 | 254 | . . .
2 | 5 | . . .
2 | 5 | . . .
3 | 8 | . . .
如您所见,每个不同的内部ID始终只有一个SAP ID 例如,您不能使用以下内容添加另一个条目:
Internal ID | SAP ID | . . .
------------+---------+
2 | 6 | . . .
因为2已经映射到5所以说一个人不应该进入上面的例子。
如何设置这样的约束?
答案 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)