2008-09-12 46 views
0

假設我有一個名爲Companies的表具有DepartmentID列。還有一個具有EmployeeID列的Departaments表。當然,我也有一個Employee表。問題是我想刪除一家公司,所以首先我必須刪除所有員工的所有員工,然後刪除公司中的所有員工。 級聯刪除不是一個選項,因此我希望使用嵌套事務。我是SQL新手,所以我會很感激你的幫助。執行級聯刪除的嵌套SQL Server事務

回答

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

您的查詢可以優化以刪除公司的INNER JOIN。或者這會是SQL Server會自動執行的事情嗎? – rpetrich 2008-09-12 14:11:08

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 

編程看起來當然有所不同,但會依賴於平臺,你正在使用