Angenommen, ich habe eine Tabelle namens Companies mit einer Spalte DepartmentID. Es gibt auch eine Departaments-Tabelle mit der Spalte EmployeeID. Natürlich habe ich auch eine Mitarbeiter-Tabelle. Das Problem ist, dass ich eine Firma löschen möchte, zuerst muss ich alle Angestellten für jede Abteilung und dann alle Abteilungen in der Firma löschen. Cascade Delete ist keine Option, daher möchte ich verschachtelte Transaktionen verwenden. Ich bin neu in SQL, daher würde ich Ihre Hilfe zu schätzen wissen.Geschachtelte SQL Server-Transaktion, die Kaskadenlöschung durchführt
Antwort
Ich bin mir nicht sicher, warum Sie verschachtelte Transaktionen benötigen Hier. Sie benötigen nur eine tatsächliche Transaktion:
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
Notiere die doppelte FROM, das ist kein Tippfehler, es ist die richtige SQL-Syntax für eine in einer DELETE JOIN ausführen.
Jede Anweisung ist atomar, entweder das gesamte DELETE wird erfolgreich sein oder fehlschlagen, was in diesem Fall nicht so wichtig ist, weil der gesamte Batch erfolgreich sein oder fehlschlagen wird.
BTW- Ich denke, du hattest deine Beziehungen rückwärts. Die Abteilung hätte keine EmployeeID, der Employee hätte eine DepartmentID.
Ich beantworte Ihre Frage nicht, aber ausländische Schlüssel ist der Weg zu gehen, warum ist es keine Option?
Wie für verschachtelte Transaktionen sind sie:
BEGIN
delete from Employee where departmentId = 1;
BEGIN
delete from Department where companyId = 2;
BEGIN
delete from Company where companyId = 2;
END
END
END
Programmatically sieht es natürlich anders, aber das würde auf der Plattform ab, die Sie verwenden
- 1. SQL - geschachtelte Select-Anweisung?
- 2. SQL Server: geschachtelte Abfragedatei
- 3. SQLAlchemy Beziehung Kaskadenlöschung
- 4. Wie geschachtelte Abfragen in MongoDb zu machen, die funktioniert wie geschachtelte Sql Select-Abfragen
- 5. SQL Server geschachtelte Menge vs Hierarchyid Leistung
- 6. Wie geschachtelte bedingte SQL Server Query 2008R2
- 7. Zugriff auf geschachtelte attributierte in spark sql
- 8. Dapper ORM geschachtelte Objekte
- 9. geschachtelte Tabellenoperationen
- 10. Ergebnisse in SQL geschachtelte Abfrage mit Tabellenverknüpfung zusammenfassen
- 11. Oracle SQL ungültiger Bezeichner Fehler in geschachtelte MIT Unterabfrage
- 12. So verwenden Sie geschachtelte TransactionScopes für eine Azure SQL-Datenbank
- 13. Linq zu Sql, geschachtelte Datenstrukturen mit einer Abfrage abrufen
- 14. Oracle ODB - geschachtelte Tabellen
- 15. Geschachtelte Parallel.ForEach Loops auf der gleichen Liste?
- 16. Wie kann ich Software schreiben, die Banküberweisungen durchführt?
- 17. Was bewirkt, dass die JVM eine größere Speicherbereinigung durchführt?
- 18. Konvertieren Sie eine geschachtelte JavaScript-Objektdatenstruktur in geschachtelte Arrays
- 19. Laravel geschachtelte Route Modellbindung
- 20. Geschachtelte Tabellen mit Tablesorter
- 21. GetSet geschachtelte Eigenschaft
- 22. Wie funktionieren geschachtelte Typenargumente?
- 23. geschachtelte Jobs in Quartz
- 24. PHP - geschachtelte IF-Anweisungen
- 25. Dynamisch geschachtelte Schleifen Ebene
- 26. Kann die Dimensionstabelle nicht als geschachtelte Tabelle in SQL Server-Datentools verwenden
- 27. Rails - geschachtelte Attribute Problem
- 28. eckig geschachtelte Direktive Rückruf
- 29. Geschachtelte SELECT-Optionen
- 30. Bootstrap geschachtelte Zeilenspaltenhöhe
Ihre Abfragen können optimiert werden, um die INNEREN JOINs des Unternehmens zu entfernen. Oder wäre dies etwas, was SQL Server automatisch tun würde? – rpetrich
Sie haben Recht. Ich habe sie nur hinzugefügt, um explizit zu sein, aber Sie könnten Ihre WHERE-Klausel wie folgt ändern: WHERE Department.CompanyID = @CompanyID – Brannon