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のネストされたトランザクション
- 3. SQL Serverストアドプロシージャのネストされたトランザクション
- 4. SQL Server 2005で手動カスケード削除
- 5. SQL Server Management Studio実行ファイルが削除されました
- 6. SQLクエリの実行時間、SQL Serverの、ネストされたクエリ
- 7. SQL Serverのトランザクションでトリガーが実行されます
- 8. SQL Server 2005 - カスケード削除による外部キー
- 9. 同じトランザクションで削除された行をフェッチ/選択する
- 10. SQL Server 2014、trigger:削除された行を反復処理する方法は?
- 11. SQL Serverトリガーで挿入、更新、削除された行をコピーする方法
- 12. Objectifyでカスケード削除を実行する方法は?
- 13. カスケードされたドロップダウンリストからアイテムを削除する
- 14. 削除された行を表示するT-SQL
- 15. 最後に削除されたSQL Serverテーブルの削除されたデータをロールバックする方法
- 16. LINQ-to-SQLクラスのカスケード削除/更新
- 17. SQL Server 2008でネストされた選択
- 18. SQL Serverクエリのパフォーマンス:ネストされたカーソル
- 19. SQL Serverネストされたカーソル構文エラー
- 20. ネストされたグループSQL Serverで
- 21. Yesod削除カスケード
- 22. Bookshelfカスケード削除
- 23. JPAカスケード削除
- 24. MySQL削除カスケード
- 25. 並列ネストされたトランザクションを実行することはできますか?
- 26. SQL Server 2010のSQL ServerでID列が削除されました
- 27. org.hibernate.TransactionException:ネストされたトランザクションは
- 28. Jena TDB:ネストされたトランザクション
- 29. ADO.NETのネストされたトランザクション
- 30. EF6ネストされたトランザクション
クエリを最適化して、会社のINNER JOINを削除することができます。それとも、これはSQL Serverが自動的に行うものでしょうか? – rpetrich
あなたはそうです。私はそれらを明示的に追加しましたが、WHERE句を次のように変更することができます: WHERE Department.CompanyID = @CompanyID – Brannon