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
选中触发器全文执行即可生成索引,再次删除目标表项时就会自动先删除子表项再删除目标表项,从而成功删除。
需要刷新一下才能看到新生成的索引