假設我有一個名爲Companies的表具有DepartmentID列。還有一個具有EmployeeID列的Departaments表。當然,我也有一個Employee表。問題是我想刪除一家公司,所以首先我必須刪除所有員工的所有員工,然後刪除公司中的所有員工。 級聯刪除不是一個選項,因此我希望使用嵌套事務。我是SQL新手,所以我會很感激你的幫助。執行級聯刪除的嵌套SQL Server事務
0
A
回答
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
注意的雙人房,這不是一個錯字,它是在執行一個刪除JOIN正確的SQL語法。
每個語句都是原子的,要麼整個DELETE將成功或失敗,這在這種情況下並不重要,因爲整個批次將成功或失敗。
順便說一句 - 我認爲你有你的關係倒退。該部門不會有一個EmployeeID,該僱員將有一個DepartmentID。
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
編程看起來當然有所不同,但會依賴於平臺,你正在使用
相關問題
- 1. SQL Server 2005級聯刪除
- 2. SQL Server 2008刪除級聯
- 3. 刪除SQL Server級聯
- 4. SQL Server中的嵌套SQL事務
- 5. SQL Server 2005 - 級聯刪除的外鍵
- 6. SQL SERVER 2008R2與RAISERROR的嵌套事務
- 7. SQL Server:刪除表級聯等效?
- 8. 如何使用SQL Server級聯刪除?
- 9. SQL級聯刪除
- 10. SQL嵌套事務
- 11. SQL外鍵刪除級聯
- 12. SQL Server觸發器刪除或級聯刪除
- 13. 級聯刪除SQL輸出
- 14. SQL刪除與級聯
- 15. SQL - 刪除級聯用於?
- 16. NHibernate,「在刪除級聯」,級聯刪除相關表中的行?
- 17. 使用級聯刪除對SQL Server中的N級樹進行建模
- 18. c#與sql嵌套事務
- 19. 級聯保存 - StaleObjectStateException:行被其他事務更新或刪除
- 20. 梯級上刪除嵌套表
- 21. 執行級聯刪除在整個has_many通過關聯
- 22. Oracle到SQL Server的遷移問題 - 刪除級聯
- 23. 級聯刪除
- 24. 級聯/刪除
- 25. 級聯刪除
- 26. LLBLGen級聯刪除?
- 27. 如何在Linq中執行多級級聯刪除?
- 28. Rails嵌套模型 - 刪除關聯
- 29. 嘗試刪除SQL上的級聯加
- 30. SQL Server存儲過程中的嵌套事務
您的查詢可以優化以刪除公司的INNER JOIN。或者這會是SQL Server會自動執行的事情嗎? – rpetrich 2008-09-12 14:11:08