多列约束问题

时间:2012-12-13 22:27:04

标签: sql sql-server

我正在尝试编写一个约束,说明每个ID,只能有一行值为X.

这可能没什么意义,所以让我举个例子:

假设我在表中有3行和2列,每行具有相同的ID(第1列),但第二列具有不同的值,其中两列相同,第三列是唯一的。如何确保唯一值保持唯一?

这是我一直在使用的约束:

ADD CONSTRAINT myConstraint UNIQUE (col1, col2);

我认为我可以使col2为NULL并且具有重复项,然后在我是唯一时使用NOT NULL(因为我只关心单个值是唯一的)。这不起作用的原因是由于某种原因我的约束不允许重复的NULLS,几乎就像它知道如何比较NULL ...

理想情况下,我想说

ADD CONSTRAINT myConstraint UNIQUE (col1, col2 = 'REQUESTED');

但是这样的东西不存在。

我调查了CHECK个约束但是我不知道如何使用检查约束告诉它这样做。

基本上我想获取传入的ID,并确保没有其他具有column2值REQUESTED的相同ID。

对不起,如果这没有多大意义,我会尽力解释这一点。

1 个答案:

答案 0 :(得分:1)

您可以使用已过滤的索引:http://msdn.microsoft.com/en-us/library/cc280372(v=sql.100).aspx

CREATE UNIQUE NONCLUSTERED INDEX [test_idx] ON [dbo].[test] ([col1], [col2])
WHERE ([col2] IS NOT NULL)

它是唯一索引,因此它不允许您为给定ID(col1)插入重复的col2值并充当您想要的约束。在您的情况下,您还可以使用col2 = 'REQUESTED'过滤器。