You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建仅当Approved为1时生效的三字段SQL唯一约束?

可以实现该逻辑

在SQL Server中,通过**过滤唯一索引(Filtered Unique Index)**就能实现这个需求,它可以仅对满足特定条件的记录强制唯一约束。

实现示例

假设你的表名为YourTableName,执行以下SQL语句创建过滤唯一索引:

CREATE UNIQUE NONCLUSTERED INDEX IX_YourTableName_ContentId_MemberId_Approved
ON YourTableName (ContentId, MemberId, Approved)
WHERE Approved = 1;

场景验证

  1. 触发唯一键错误的情况:
    当尝试插入与已存在的Approved=1记录拥有相同ContentId和MemberId的记录时(Approved也为1),SQL Server会抛出唯一键冲突错误,符合需求。示例插入语句:

    INSERT INTO YourTableName (ContentId, MemberId, Approved)
    VALUES ('99999999-9999-9999-9999-999999999999', '88888888-8888-8888-8888-888888888888', 1);
    
  2. 允许插入的情况:
    插入相同ContentId和MemberId但Approved=0的记录,无论插入多少条都不会触发约束错误。示例插入语句:

    INSERT INTO YourTableName (ContentId, MemberId, Approved)
    VALUES ('99999999-9999-9999-9999-999999999999', '88888888-8888-8888-8888-888888888888', 0);
    -- 重复执行这条语句也不会报错
    

注意事项

  • 过滤索引仅在SQL Server 2008及以上版本支持;如果使用其他数据库(如MySQL),可以通过唯一约束结合触发器实现类似逻辑,但SQL Server的过滤索引是最简洁的方案。

内容的提问来源于stack exchange,提问作者Ruslan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:20:30