假设我有一个名为 Companies 的表,其中有一个 DepartmentID 列。还有一个包含 EmployeeID 列的部门表。当然我也有一个 Employee 表。问题是我想删除一个公司,所以首先我必须删除每个部门的所有员工,然后删除公司的所有部门。级联删除不是一个选项,因此我希望使用嵌套事务。我是 SQL 新手,因此非常感谢您的帮助。

有帮助吗?

解决方案

我不确定为什么这里需要嵌套事务。您只需要一笔实际交易:

BEGIN TRAN

DELETE FROM Employee
    FROM Employee
    INNER JOIN Department ON Employee.DepartmentID = Department.DepartmentID
    INNER JOIN Company ON Department.CompanyID = Company.CompanyID
    WHERE Company.CompanyID = @CompanyID

DELETE FROM Department
    FROM Department
    INNER JOIN Company ON Department.CompanyID = Company.CompanyID
    WHERE Company.CompanyID = @CompanyID

DELETE FROM Company
    WHERE Company.CompanyID = @CompanyID

COMMIT TRAN

请注意双 FROM,这不是拼写错误,它是在 DELETE 中执行 JOIN 的正确 SQL 语法。

每个语句都是原子的,整个 DELETE 要么成功,要么失败,这在本例中并不重要,因为整个批处理要么成功,要么失败。

顺便说一句-我认为你的人际关系倒退了。部门不会有 EmployeeID,而 Employee 将有 DepartmentID。

其他提示

我不是在回答你的问题,而是在回答外键 要走的路,为什么不是一个选择?

至于嵌套事务,它们是:

BEGIN
  delete from Employee where departmentId = 1;
  BEGIN
     delete from Department where companyId = 2;
     BEGIN
        delete from Company where companyId = 2;
     END
  END
END

当然,从编程角度来看,它看起来有所不同,但这取决于您使用的平台

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top