强制2列具有唯一值

时间:2012-07-31 08:33:29

标签: sql sql-server tsql

我想为相关产品制作一张桌子,所以产品会有很多关系。我想确保产品与自己没有关系。

我的表格如下:

ProductID int
RelatedToProductID int
Active bit

并且具有以下值:

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

但是我想排除像上一个关系,如果产品与自身有关系。

有谁知道如何在ms sql中实现这一点?

4 个答案:

答案 0 :(得分:4)

您可以使用check约束来阻止自我关系:

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

答案 1 :(得分:1)

您可以在列(productID,RelatedToProductID)

上添加UNIQUE约束
alter table YourTable add UNIQUE(productID,RelatedToProductID)

答案 2 :(得分:-1)

来自MSDN

  

℃。创建唯一的非聚集索引

     

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

查询:

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

另见Difference Between Unique Index vs Unique Constraint

答案 3 :(得分:-2)

Select ... From Table Where productId <> RelatedToProductId