SQL Server 2008 : Check constraints that guarantees that only one value in all rows is set to 1 and others are 0

标签 sql sql-server sql-server-2008 constraints check-constraint

需要对列建立约束,保证所有行中只有一个值为 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/

相关文章:

sql - 从sql中的两个表中选择固定数量的行

总计的php sql查询语句

sql - 获取由最小值和最大值标识的组中的连续值

sql - 在 SQL Server 2008 中使用分组依据和排序依据检索结果时出错

sql-server - SQL Server 堆与堆聚集索引

SQL SERVER QUERY 选择每个项目的最大值记录

sql - 了解 Postgres 查询计划

sql - SELECT 语句中的列别名不适用于 SQuirrel SQL + Firebird

sql - 有没有办法找到哪些帐户可以执行xp_cmdshell?

c++ - 使用 CDynamicAccessor 连接到数据库时如何判断列是文本还是 ntext?