我正在尝试编写一个约束,说明每个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。
对不起,如果这没有多大意义,我会尽力解释这一点。
答案 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'
过滤器。