メインテーブルのIDを8つのテーブルの外部キーとして参照していることを理解したスクリプトを実行中に、メインテーブルからレコードを削除しようとしています。テーブル制約を変更する必要があるので、私はCASCADE DELETEを使いたくありません。私のメインテーブルはJobと呼ばれ、プライマリキーは 'Id'で、他のテーブルでは外部キー 'JobId'として参照されます。外部キーを持つ複数のテーブルから削除する
メインテーブルから削除する前に、関連テーブルの外部キー参照レコードを削除するにはどうすればよいですか。
ここは私のコードです。コメントされたコードは単なる予測にすぎません。
SELECT * FROM [JOB] j WHERE [email protected] AND [email protected] AND [email protected]
AND Id<>@Id AND NOT EXISTS (SELECT * FROM NewJob nj WHERE J.Id=nj.Id)
--DELETE FROM [Table1] a WHERE a.JobId = j.Id AND
--DELETE FROM [Table2] F WHERE f.JobId = j.Id AND
--DELETE FROM [Table3] jct WHERE jct.JobId = j.Id AND
--DELETE FROM [Table4] jch WHERE jch.JobId = j.Id AND
--DELETE FROM [Table5] jedu WHERE jedu.JobId = j.Id AND
--DELETE FROM [Table6] jexp WHERE jexp.JobId = j.Id AND
--DELETE FROM [Table7] jflc WHERE jflc.JobId = j.Id AND
--DELETE FROM [Table8] usj WHERE usj.JobId = j.Id AND
DELETE FROM [JOB] WHERE Id IN (SELECT Id FROM [JOB] WHERE [email protected] AND [email protected] AND [email protected] AND Id<>@Id)
私はその後、PK/FK関係テーブル上の一時テーブルに内部結合を持つ他のテーブルの上に削除を使用、一時テーブルにあなたのメインテーブルからデータを入れて試してみました。 –
正しいソリューションのような 'DELETE CASCADE'サウンドは、あなたがなぜそれを使いたくないのかわかりません。もう1つの方法は、最初にすべての外部表を削除するトランザクション内の関数を作成することです。 –
例を示すことができます – user1221765