0


1

DepartmentID列を持つCompaniesというテーブルがあるとします。 EmployeeID列を持つDepartamentsテーブルもあります。 もちろん、Employeeテーブルもあります。 問題は、会社を削除したいということなので、最初にすべての出国ごとにすべての従業員を削除し、次にその会社内のすべての出国を削除する必要があるということです。 カスケード削除はオプションではないので、ネストしたトランザクションを使いたいのです。 私はSQLに慣れていないのであなたの助けに感謝します。

2 Answer


4


なぜここでネストしたトランザクションが必要なのかわかりません。 実際の取引は1つだけ必要です。

BEGIN TRAN

従業員からの削除従業員からの削除内部従業員の部署Employee.DepartmentID = Department.DepartmentID内部結合部署Department.CompanyID = Company.CompanyID WHERE Company.CompanyID = @会社ID

部署から部署を削除する内部部署に所属Company.CompanyID = Company.CompanyID WHERE Company.CompanyID = @CompanyID

会社から削除DELL Company.CompanyID = @会社ID

コミットトラン

二重のFROMに注意してください、それはタイプミスではありません、それはDELETEでJOINを実行するための正しいSQL構文です。

各ステートメントはアトミックで、DELETE全体が成功するか失敗するかのどちらかです。バッチ全体が成功するか失敗するかのどちらかなので、この場合はそれほど重要ではありません。

ところで - 私はあなたが後方にあなたの関係を持っていたと思います。 DepartmentはEmployeeIDを持たず、EmployeeはDepartmentIDを持ちます。


0


私はあなたの質問に答えていませんが、外国の鍵が行く道である、なぜそれが選択肢ではないのですか?

ネストしたトランザクションに関しては、それらは以下のとおりです。

BEGIN departmentId = 1のEmployeeから削除します。 BEGINは、companyId = 2の部門から削除します。 BEGIN companyId = 2の会社から削除します。 END END END

プログラム的には当然違って見えますが、それはあなたが使用しているプラ​​ットフォームによって異なります。