回答

9

编辑

其实我只注意到你是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 

添加计算列,并添加一个唯一约束了这一点。

+0

@Tim - 否。在检查约束中使用UDF可能会因多行更新和快照隔离而失败。我只是使用过滤索引方法。它将确保最多1行可以包含值“1”。如果你用你的表格定义更新你的问题,我会尝试澄清我的第二个建议。 (编辑:这是回复你先前的评论,似乎已经走了!) – 2010-09-27 20:01:24

+0

是的,我已经检查了细节,它变得清晰。谢谢! – Tim 2010-09-28 07:42:16

+0

这也具有显着加速涉及“活动”行的查询的效果,即“where col = 1” – 2011-11-14 18:06:26

相关问题