SQL Server:check boolean只能出现一次为true

时间:2015-02-25 13:19:14

标签: sql sql-server sql-server-2008-r2

在SQL Server 2008 R2中,我有一个包含[Id][Name][bDefault]的表格。所有列都不可为空

是否可以通过检查bDefault只能对一个记录为真?使其成为唯一索引将不起作用,因为只有最多1条记录为真,其余的都是假的。

2 个答案:

答案 0 :(得分:9)

使用过滤的唯一索引:

CREATE UNIQUE INDEX IX_... ON [Table](bDefault) WHERE bDefault = 1

答案 1 :(得分:1)

在sql-server 2008之前,可以防止使用触发器重复值。这是一个例子:

CREATE TABLE xxx(a bit)

go

CREATE TRIGGER xxx_trg
ON xxx
AFTER INSERT, UPDATE
as
IF exists
  (SELECT 1
   FROM xxx
   WHERE a = 1
   GROUP BY a
   HAVING count(*) > 1
  )
    BEGIN
    RAISERROR ('Already exists', 16, 1);
    ROLLBACK transaction;
    RETURN
END