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
在 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