需要对列建立约束,保证所有行中只有一个值为 1,其他均为 0。
存在带有触发器的解决方案,但我想要内置一些东西。
这样的事情可能吗?
最佳答案
编辑
实际上我刚刚注意到您使用的是 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
并为其添加唯一约束。
关于SQL Server 2008 : Check constraints that guarantees that only one value in all rows is set to 1 and others are 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3804663/