DepartmentID列を持つCompaniesというテーブルがあるとします。 EmployeeID列を持つDepartamentsテーブルもあります。もちろん私はEmployeeテーブルも持っています。問題は私が会社を削除したいので、最初にすべての従業員をすべての部門のために削除してから、会社のすべての部門を削除する必要があるということです。 カスケード削除はオプションではないため、ネストされたトランザクションを使用したいと考えています。私はSQLに新しいので、あなたの助けに感謝します。カスケード削除を実行するネストされたSQL Serverトランザクション
0
A
答えて
4
を使用しているプラットフォームに依存したいですここに。あなたが唯一の実際のトランザクションを必要とする:FROMダブル
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
注意を、それはそれはDELETEに参加を実行するための正しいSQL構文だ、タイプミスではありません。
各文はアトミックです。DELETE全体が成功するか失敗するかはバッチ全体が成功するか失敗するため、この場合重要ではありません。
私はあなたがあなたの関係を後方に持っていたと思います。 DepartmentはEmployeeIDを持たず、Employeeは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のネストされたトランザクション
- 2. SQL Server 2005で手動カスケード削除
- 3. SQL Serverのトランザクションでトリガーが実行されます
- 4. SQL Server 2005 - カスケード削除による外部キー
- 5. 同じトランザクションで削除された行をフェッチ/選択する
- 6. SQL Serverトリガーで挿入、更新、削除された行をコピーする方法
- 7. Objectifyでカスケード削除を実行する方法は?
- 8. 削除された行を表示するT-SQL
- 9. SQL Server 2008でネストされた選択
- 10. Jena TDB:ネストされたトランザクション
- 11. ADO.NETのネストされたトランザクション
- 12. 並列ネストされたトランザクションを実行することはできますか?
- 13. LINQ-to-SQLクラスのカスケード削除/更新
- 14. Yesod削除カスケード
- 15. MySQL削除カスケード
- 16. JPAカスケード削除
- 17. SQL Server 2010のSQL ServerでID列が削除されました
- 18. SQL 2008のHierarchyIDデータ型でカスケード削除を実行するにはどうすればよいですか?
- 19. ジレンマ:カスケード削除または結合削除
- 20. 削除されたオブジェクトのSQL Serverデータベースアーキテクチャ(デザイン)+レポート
- 21. SQL Server 2005:削除された列のディスク容量
- 22. 防止がSQL Serverで単一の行を削除するが、他の行は同じトランザクションで
- 23. PostgreSQLのカスケード削除
- 24. レルムの "カスケード削除"
- 25. JPA:逆カスケード削除
- 26. ActiveRecordでネストされたトランザクションを必要とするネストされたUI
- 27. SQLの挿入 - 削除されたテーブル
- 28. ネストされたサブクエリを参照するSQL Server
- 29. Sql Server 2008 - シノニムを削除する
- 30. SQL Serverでグローバルテンポラリテーブル(## tempTable)を削除する
クエリを最適化して、会社のINNER JOINを削除することができます。それとも、これはSQL Serverが自動的に行うものでしょうか? – rpetrich
あなたはそうです。私はそれらを明示的に追加しましたが、WHERE句を次のように変更することができます: WHERE Department.CompanyID = @CompanyID – Brannon