在SQL Server 2008 R2中,我有一个包含[Id]
,[Name]
和[bDefault]
的表格。所有列都不可为空。
是否可以通过检查bDefault
只能对一个记录为真?使其成为唯一索引将不起作用,因为只有最多1条记录为真,其余的都是假的。
答案 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