基于计数的SQL检查约束

时间:2015-01-17 21:42:25

标签: sql sql-server check-constraints

我有以下表格架构:

CREATE TABLE saved_custom_view (
[saved_custom_view_id]  BIGINT          IDENTITY (1, 1) NOT NULL,        
[user_id]               BIGINT          NULL,   
[name]                  NVARCHAR (250)  NOT NULL,
[is_default_view]       BIT             NOT NULL DEFAULT 0
CONSTRAINT [PK__saved_custom_view] PRIMARY KEY CLUSTERED ([saved_custom_view_id] ASC),    
CONSTRAINT [FK__saved_custom_view__user] FOREIGN KEY ([user_id]) REFERENCES [user] ([user_id]),     

);

我想确保没有用户将is_default_value设置为true的多行。因此,应使用适当的CHECK CONSTRAINT防止此处的第二个插入。

insert into saved_custom_view values (1, 'test', 1)
insert into saved_custom_view values (1, 'test', 1)

如何为此编写检查约束?

ALTER TABLE saved_custom_view
ADD CONSTRAINT CK_no_user_has_duplicate_default_views CHECK (
    -- what goes here?
);

或者有没有办法对多个列进行独特检查?

1 个答案:

答案 0 :(得分:3)

您可以使用过滤后的唯一索引:

create unique index idx_save_custom_view_u1 on
    saved_custom_view(user_id, is_default_value)
    where is_default_value = 1;

更详细地描述了这些here