중첩된 SQL Server 트랜잭션 수행하는 폭포 삭제
-
09-06-2019 - |
문제
한 두 가지가 아닌이라는 테이블이 회사는 DepartmentID 열입니다.또한 Departaments 가 있는 테이블로 EmployeeID 열입니다.물론 내가는 직원이 있습니다.문제는 나를 삭제하려는 회사,그래서 먼저 나를 삭제하는 모든 직원들에 대한 모든 departament 그리고 모든 departaments 에는 회사입니다.캐스케이드를 삭제하지 않는 옵션이므로 내가 사용하고자하는 중첩된 트랜잭션이 있습니다.나는 새로운 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
주중에는 오타,올바른 SQL 구문을 수행하에 참여 삭제합니다.
각각의 문은 원자,또는 전체를 삭제할 것이 성공하거나 실패는 없는 중요하므로 이러한 상황에서는 전체를 배치나 성공이나 실패합니다.
BTW-내 생각에 당신은 당신의 관계를 뒤.부서지 않을 것이다 EmployeeID,원가 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
프로그래밍 방식으로 그것이 다른 모습은 물론이지만,그에 따라 달라집 플랫폼을 사용하는
제휴하지 않습니다 StackOverflow