Sql Server 2008按条件排列的唯一列

时间:2011-08-25 09:33:22

标签: sql-server sql-server-2008

假设我在数据库中有以下表格:

Id ProductId ColorId IsDeleted
1  1         1       1
2  1         1       0
3  2         3       0

我希望ProductIdColorId列唯一,但仅适用于IsDeleted = 0的行。我如何才能达到这个要求?

我知道,我可以创建一个调用存储函数的约束。并且存储的函数将尝试查找具有相同值的条目。但我认为这是复杂的方式。可能有更好的决定......

1 个答案:

答案 0 :(得分:3)

在SQL Server 2008及更高版本中,您可以利用筛选索引来实现此目的:

CREATE NONCLUSTERED UNIQUE INDEX ProductColor
   ON dbo.YourTable(ProductID, ColorID)
   WHERE IsDeleted = 0;

有关更多背景和最佳做法,请参阅Filtered Index Design Guidelines