【发布时间】:2012-12-13 22:27:04
【问题描述】:
我正在尝试编写一个约束,说明每个 ID 只能有一行的值为 X。
这可能没有多大意义,所以让我举个例子:
假设我在一个表中有 3 行和 2 列,每行具有相同的 ID(第 1 列),但第二列具有不同的值,其中两个相同,第三个是唯一的。如何确保唯一值保持唯一?
这是我一直在使用的约束:
ADD CONSTRAINT myConstraint UNIQUE (col1, col2);
我认为我可以将 col2 设为 NULL 并有重复项,然后在我唯一的时候使用 NOT NULL(因为我只关心单个值是否唯一)。这不起作用的原因是由于某种原因我的约束不允许重复的 NULL,几乎就像它知道如何比较 NULL...
理想情况下我想说
ADD CONSTRAINT myConstraint UNIQUE (col1, col2 = 'REQUESTED');
但类似的东西不存在。
我查看了CHECK 约束,但我不确定如何使用检查约束告诉它这样做。
基本上我想获取传入的 ID 并确保没有其他相同的 ID 的 column2 值为REQUESTED。
对不起,如果这没有多大意义,我正在尽力解释这一点。
【问题讨论】:
-
听起来像触发器会起作用。对于具有不适合可用声明性约束的特殊条件的约束,它们是一个很好的替代方案。
标签: sql sql-server