【发布时间】:2010-09-27 14:14:19
【问题描述】:
需要在列上建立约束,保证所有行中只有一个值为 1,其他所有值为 0。
存在带触发器的解决方案,但我想内置一些东西。
这样的事情有可能吗?
【问题讨论】:
标签: sql sql-server sql-server-2008 constraints check-constraint
需要在列上建立约束,保证所有行中只有一个值为 1,其他所有值为 0。
存在带触发器的解决方案,但我想内置一些东西。
这样的事情有可能吗?
【问题讨论】:
标签: sql sql-server sql-server-2008 constraints check-constraint
编辑
实际上我刚刚注意到您使用的是 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
并为其添加唯一约束。
【讨论】:
1。如果您使用表格定义更新您的问题,我将尝试澄清我的第二个建议。 (编辑:这是对您之前似乎已经消失的评论的回复!)