SQL Server 删除子记录的删除触发器

yv5phkfx  于 2022-12-22  发布在  其他
关注(0)|答案(1)|浏览(125)

因此,我有两个表,一个是sales_order(no_so VARCHAR主键),另一个是status_so(no_so引用sales_order)
我希望在删除sales_order中的no_so时,status_so中的no_so也会被删除。因此,我创建了触发器来解决这个问题。

CREATE TRIGGER trg_sales_order
ON sales_order
FOR DELETE
AS
   DELETE FROM status_so 
   WHERE status_so.no_so IN (SELECT deleted.no_so FROM deleted)

然后我运行这段代码

DELETE FROM sales_order WHERE no_so = 'SO004'

但还是出错了它说
DELETE语句与REFERENCE约束“FK_status_so_sales_order”冲突。冲突发生在数据库“db”,表“dbo.status_so”,列“no_so”中。

umuewwlo

umuewwlo1#

docs
或|AFTER FOR或AFTER指定仅当触发SQL语句中指定的所有操作都已成功启动时才触发DML触发器。在触发此触发器之前,所有引用级联操作和约束条件检查也必须成功。
您需要创建instead of删除触发器,并按照正确的顺序处理两个表中的删除操作。

相关问题