0

我正在尝试编写一个约束,说明每个 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 并确保没有其他相同的 ID 具有 column2 值REQUESTED

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

4

1 回答 1

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'过滤器。

于 2012-12-13T22:57:53.220 回答