SQL 根据计数检查约束
SQL Check Constraint Based on Counts
我有以下 table 架构:
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?
);
或者有没有办法对多列进行唯一检查?
您可以只使用过滤后的唯一索引:
create unique index idx_save_custom_view_u1 on
saved_custom_view(user_id, is_default_value)
where is_default_value = 1;
更详细地描述了这些 here。
我有以下 table 架构:
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?
);
或者有没有办法对多列进行唯一检查?
您可以只使用过滤后的唯一索引:
create unique index idx_save_custom_view_u1 on
saved_custom_view(user_id, is_default_value)
where is_default_value = 1;
更详细地描述了这些 here。