4
需要在列上构建约束条件,以确保所有行中只有一个值为1,并且所有行其他为0SQL Server 2008:检查约束条件,确保所有行中只有一个值设置为1,其他值为0
解决方案与触发器存在,但我想有一些内置的。
是这样的事情可能呢?
需要在列上构建约束条件,以确保所有行中只有一个值为1,并且所有行其他为0SQL Server 2008:检查约束条件,确保所有行中只有一个值设置为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
添加计算列,并添加一个唯一约束了这一点。
@Tim - 否。在检查约束中使用UDF可能会因多行更新和快照隔离而失败。我只是使用过滤索引方法。它将确保最多1行可以包含值“1”。如果你用你的表格定义更新你的问题,我会尝试澄清我的第二个建议。 (编辑:这是回复你先前的评论,似乎已经走了!) – 2010-09-27 20:01:24
是的,我已经检查了细节,它变得清晰。谢谢! – Tim 2010-09-28 07:42:16
这也具有显着加速涉及“活动”行的查询的效果,即“where col = 1” – 2011-11-14 18:06:26