【发布时间】:2021-11-21 06:57:01
【问题描述】:
我的 Employee 表的主键列是 (EmpID),它在两个 Other 表中被引用
EmployeeEducation 表和EmployeeBankInformation 表。
我想根据他们的 ID 删除 Employee,但是当我运行存储过程时,我的控制器抛出了由于 EmpID 列而导致外键引用约束冲突的错误。
ALTER PROCEDURE [dbo].[RemoveEmployee]
(
@EmpID int
)
AS
BEGIN
DELETE FROM Employee WHERE EmpID = @EmpID
DELETE FROM EmployeeEducation WHERE EmpID = @EmpID
DELETE FROM EmployeeBankInformation WHERE EmpID = @EmpID
END
我哪里错了?你们谁能告诉我在我的程序中犯了什么错误?
【问题讨论】:
-
您需要从引用
Employee作为外键的表中首先 中DELETE,然后从表Employee中DELETE。首先删除Employee中的行是不好的,因为这会导致表EmployeeEducation和EmployeeBankInformation中的外键约束失败。 -
旁注:总是模式限定你的对象。不要依赖
USER的默认架构是正确的。 -
@Larnu 你的意思是说我上面写的我只是把那些陈述反过来写
-
有点。很可能(我不能确定,因为我没有你的表的定义)不管你是先从
DELETE还是EmployeeEducation还是EmployeeBankInformation,但它确实 您从Employee最后删除的事项。
标签: sql sql-server stored-procedures ssms sql-delete