SQLServer级联删除执行delete报错 约束"FK_****"冲突原因及解决办法

DELETE 语句与 REFERENCE 约束"FK_staff_category"冲突。该冲突发生于数据库"beautyinfo",表"dbo.staff", column 'caID'。

在做asp.net项目时,使用sql语句删除表中项目会出现如上错误。原因是与该表项关联的子项没有删除,要先删除该项的子项才能删除该项目。就好比解散一家公司,得先遣散公司里的所有员工。

具体解决办法有两种:

方法1.在表的关联属性中设置删除表项时实现级联操作:

1.1选中目标表右击,单击“设计”

1.2在表编辑页打开后,点击关系按钮

1.3在对话框做如下设置

1.4关闭对话框口后,别忘记在表编辑页右击保存,之后才能生效。

完成设置后即可成功删除该表中的表项(如果不能保存请先设置允许修改已经建好的表 教程:https://jingyan.baidu.com/article/c33e3f48d3e20dea15cbb595.html

 

方法2:新建索引,在删除目标表项时触发索引实现先删除子项再删除本项,从而避免出错。

2.1在目标表中新建触发器

2.2新建的触发器是这个样子

手动编写一下:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
CREATE TRIGGER trigCategoryDelete
   ON  Category
   INSTEAD OF DELETE--将delete操作替换为begin后面的操作
AS 
BEGIN
    declare @id int--指定@id的类型
    select @id=id from deleted --选中目标表项id
    delete staff where caID = @id --删除与目标id对应的子项
    delete category where id = @id --删除目标表项
END
GO

选中触发器全文执行即可生成索引,再次删除目标表项时就会自动先删除子表项再删除目标表项,从而成功删除。

需要刷新一下才能看到新生成的索引

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值