Bir Departman Kimliği sütununa sahip Şirketler adlı bir tablo var. EmployeeID sütunu olan bir Departaments tablosu da var. Tabii ki bir de çalışan tablom var. Sorun şu ki, bir şirketi silmek istiyorum, bu yüzden önce tüm çalışanları ve şirketteki tüm departamentleri silmek zorundayım. Cascade Sil bir seçenek değildir, bu nedenle iç içe geçmiş işlemleri kullanmak istiyorum. SQL konusunda yeniyim, bu yüzden yardımın için minnettarım.İç içe SQL Server işlemi kaskad silme gerçekleştiriliyor
0
A
cevap
4
kullandığınız platforma bağlı ediyorum İşte. o bir DELETE içinde JOIN gerçekleştirmek için doğru SQL sözdizimi var, bir yazım hatası değil,
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
Not GELEN çift: Yalnızca bir asıl işlemi gerekir.
Her ifade atomiktir, ya DELETE'nin tamami basar ya da basarisiz olur; bu, bu durumda önemli degildir, çünkü tüm grup ya basar ya da basarisiz olur.
BTW-Sanırım ilişkilerinizi geri aldınız. Departmanın bir Çalışan Kimliği bulunmayacak, Çalışan bir Departman Kimliği alacaktı.
0
Sorunuzu yanıtlamıyorum, ancak yabancı tuşlar yoludur, neden bir seçenek değil? İç içe işlemler gelince
onlar:
BEGIN
delete from Employee where departmentId = 1;
BEGIN
delete from Department where companyId = 2;
BEGIN
delete from Company where companyId = 2;
END
END
END
Programlı elbette farklı görünüyor, ama bu iç içe geçmiş işlem neden ihtiyaç emin değilim sen
Şirketinizdeki INNER JOIN'leri kaldırmak için sorgularınız en iyi duruma getirilebilir. Yoksa bu SQL Server'ın otomatik olarak yapacağı bir şey mi olurdu? – rpetrich
Haklısınız. Ben sadece açık olması için onları ekledim, ancak WHERE yan tümcesini değiştirmek için: WHERE Department.CompanyID = @CompanyID – Brannon