SQL Server 2008:检查约束,确保所有行中只有一个值设置为1,其他值为0

Tim*_*fey 4 sql sql-server constraints sql-server-2008 check-constraint

需要在列上构建约束,以确保所有行中只有一个值为1,而其他所有值都为0.

存在触发器的解决方案,但我希望内置一些东西.

这样的事情有可能吗?

Mar*_*ith 9

编辑

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

CREATE UNIQUE NONCLUSTERED INDEX UIX ON YourTable (col) where col = 1
Run Code Online (Sandbox Code Playgroud)

原始答案

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

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

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

case when col=1 then -1 else id end
Run Code Online (Sandbox Code Playgroud)

并为其添加一个唯一约束.