gpt4 book ai didi

sql-server - SQL Server 检查约束以防止特定的重复项

转载 作者:行者123 更新时间:2023-12-04 00:03:17 25 4
gpt4 key购买 nike

我有这样的数据结构:

CREATE TABLE test_Bundles 
(
BundleId INT,
UserId INT,
status INT
)

INSERT INTO test_Bundles VALUES (1, 1, 1)
INSERT INTO test_Bundles VALUES (2, 1, 3)
INSERT INTO test_Bundles VALUES (3, 1, 3)
INSERT INTO test_Bundles VALUES (4, 2, 1)
INSERT INTO test_Bundles VALUES (5, 2, 3)
INSERT INTO test_Bundles VALUES (6, 2, 3)
GO

一个用户只能拥有一个 status=1 的包。但是他们可以有很多 status=2 或 status=3 或 status=4。

谁能想出一种方法在 SQL Server 中强制执行此规则?

最佳答案

好吧,您可以自然地使用触发器,或者您可以使用唯一的过滤索引(如果您运行的是 SQL Server 2008 或更高版本),例如:

create unique index ix_tmp 
on test_Bundles (UserId, status) where status = 1;

如果您更喜欢采用触发器路由(它适用于任何合理版本的 SQL Server),它看起来像这样:

create trigger tgrTmp on test_Bundles for insert, update 
as
begin;

if exists( select *
from test_Bundles t
join inserted i
on t.UserId = i.UserId
and t.BundleId != i.BundleId
where t.status = 1
and i.status = 1)
begin;
raiserror ('unique violation',16,1);
rollback;
end;

end;

关于sql-server - SQL Server 检查约束以防止特定的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32618875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com