SQL 服务器:检查布尔值只能出现一次为真

SQL Server : check boolean can only occur once as true

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

是否可以检查 bDefault 只能对 一条 记录为真?将其设为唯一索引是行不通的,因为最多只有 1 条记录为真,其余所有记录均为假。

使用过滤后的唯一索引:

CREATE UNIQUE INDEX IX_... ON [Table](bDefault) WHERE bDefault = 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