4

需要在列上建立约束,以保证所有行中只有一个值为 1,而所有其他值为 0。

存在带触发器的解决方案,但我想内置一些东西。

这样的事情有可能吗?

4

1 回答 1

9

编辑

实际上,我只是注意到您在 SQL Server 2008 上,您可以为此使用过滤索引

CREATE UNIQUE NONCLUSTERED INDEX UIX ON YourTable (col) where col = 1

原始答案

最简单的方法可能是将这个特殊的 pk 存储在单独的一行表中。可以通过检查约束强制执行不超过一行的方面。

CREATE TABLE OneRowTable
(
lock CHAR(1) DEFAULT 'X' NOT NULL PRIMARY KEY CHECK (lock = 'X'),
OtherTablePK int
);

否则,假设您可能有一个由正整数组成的 id 字段,您可以添加一个具有以下定义的计算列

case when col=1 then -1 else id end

并为其添加唯一约束。

于 2010-09-27T14:19:33.507 回答