如果插入的值与唯一约束冲突,则 SQL 触发器在插入时更新字段

Posted

技术标签:

【中文标题】如果插入的值与唯一约束冲突,则 SQL 触发器在插入时更新字段【英文标题】:SQL Trigger to update a field on insert if the inserted value conflicts with the unique constraint 【发布时间】:2011-04-09 11:56:06 【问题描述】:

我有一个名为 Albums 的表,其中包含一个字段 IsDeleted 和一个字段“名称”。 名称是唯一键。我的问题是:

如果将 IsDeleted 设置为 True 并且用户将相同的名称插入到表中,我可以创建一个将 IsDeleted 更新为 False 的触发器吗?

当然,插入语句应该以某种方式更改为更新语句。

我正在使用 MSSQL 2008,我对触发器和 SQL 很陌生

感谢您的帮助!

【问题讨论】:

【参考方案1】:

是的,您可以使用instead of 触发器来执行此操作。示例:

create trigger albums_ins_trig on albums instead of insert as begin
    -- update albums which already exist and are being inserted again
    update albums set IsDeleted=0 where IsDeleted=1 
    and exists (select * from inserted where albums.name=inserted.name)
    -- insert new albums
    insert into albums select * from inserted 
    where not exists (select * from albums where albums.id=inserted.id) 
end

【讨论】:

以上是关于如果插入的值与唯一约束冲突,则 SQL 触发器在插入时更新字段的主要内容,如果未能解决你的问题,请参考以下文章

Oracle - 在插入前触发检查约束

SQL插入的唯一约束-ORACLE

如何使用hibernate避免遇到违反唯一约束的问题?

22 高级SQL特性

MySQL INSERT插入条件判断:如果不存在则插入

Sql Server 主键 外键约束