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

如何创建SQL触发器:按指定列条件过滤重复行插入

实现阻止重复列值插入的SQL触发器

需求说明

  • 控制table01表的新行插入:仅当新行的col2、col3、col5三列组合值在表中不存在时,才允许插入;若已有完全匹配的组合,则阻止插入。
  • 示例:若新行col2=B、col3=[某值]、col5=G,且表中已有这三列值完全相同的行,触发器会拦截该插入操作。

完整触发器代码

CREATE TRIGGER trig_a
ON table01
INSTEAD OF INSERT
AS
BEGIN
    -- 仅插入原表中不存在col2、col3、col5组合匹配的行
    INSERT INTO table01
    SELECT *
    FROM inserted
    WHERE NOT EXISTS (
        SELECT 1
        FROM table01 t
        WHERE t.col2 = inserted.col2
          AND t.col3 = inserted.col3
          AND t.col5 = inserted.col5
    )
END

逻辑说明

  • 使用INSTEAD OF INSERT触发器替代默认的插入操作,自定义插入规则。
  • 通过NOT EXISTS子查询检查:待插入行(inserted临时表)的col2、col3、col5组合是否在原表table01中存在。
  • 仅当子查询返回空(即无匹配行)时,才执行插入操作。

注意事项

如果col2、col3或col5可能包含NULL值,上述等式判断会失效(因为NULL = NULL结果为未知),此时需要调整条件为:

WHERE (t.col2 IS NOT DISTINCT FROM inserted.col2)
  AND (t.col3 IS NOT DISTINCT FROM inserted.col3)
  AND (t.col5 IS NOT DISTINCT FROM inserted.col5)

IS NOT DISTINCT FROM会将NULL视为相等,适用于需要包含NULL值的重复判断场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:33:17