假设我有一个名为Companies的表,其中包含DepartmentID列。还有一个Departaments表,其中包含EmployeeID列。当然我也有一个Employee表。问题是我想要删除一家公司,所以首先我必须删除每个部门的所有员工,然后删除公司的所有部门。 Cascade Delete不是一个选项,因此我希望使用嵌套事务。我是SQL的新手,所以我很感激你的帮助。
答案 0 :(得分:4)
我不确定你为什么需要嵌套交易。您只需要一个实际交易:
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,员工将拥有DepartmentID。答案 1 :(得分:0)
我没有回答你的问题,但外键是的方式,为什么它不是一个选项?
至于嵌套交易,它们是:
BEGIN
delete from Employee where departmentId = 1;
BEGIN
delete from Department where companyId = 2;
BEGIN
delete from Company where companyId = 2;
END
END
END
以编程方式,它看起来当然不同,但这取决于您使用的平台