2012-07-31 104 views
3

我正在为相关产品打造一张桌子,所以产品将有许多关系。我想确保产品面包车与他们自己没有关系。强制2列有独特的价值

我的表看起来像这样:

ProductID int 
RelatedToProductID int 
Active bit 

并具有值是这样的:

productID RelatedToProductID Active 
1   2     1 
1   3     1 
2   1     1 
2   2     1 

,但我想排除如最后一个关系,是一个产品有一个关系到自身。

有没有人知道如何使MS SQL中可能?

+0

添加UNIQUE约束考虑使用GUID/UUID – 2012-07-31 08:35:48

回答

4

你可以使用一个check约束,以防止自身的关系:

alter table YourTable 
    add constraint CHK_YourTable_NoSelfRelation 
    check (productID <> RelatedToProductID) 
+0

谢谢您拯救生命。我一直在寻找这个很长一段时间。 – Tom 2012-07-31 08:57:43

-2
Select ... From Table Where productId <> RelatedToProductId 
-1

MSDN

下创建一个唯一的非聚集索引

下面的示例创建表的列中唯一的非聚簇索引。索引将强制插入到列中的数据的唯一性。

查询:

CREATE UNIQUE INDEX AK_ProductId_RelatedToProductId 
    ON table (ProductId, RelatedToProductId); 

参见Difference Between Unique Index vs Unique Constraint

+0

为什么downvote没有评论? – abatishchev 2012-08-07 11:08:46

+0

我刚读过这个,所以我会回答你真正的问题。它被低估了,因为你没有回答这个问题,并给出了一个不好的答案。这是一个不好的答案,因为你给的答案对被问的问题是不正确的。 – 2013-06-26 01:03:47

1

您可以在列(的productID,RelatedToProductID)

alter table YourTable add UNIQUE(productID,RelatedToProductID)