2016-09-11 21 views
-1

データベースのテーブルから行を削除しようとしていますが、まずその行に対応する行を外部キーで削除する必要があります。削除トリガーの代わりにSQL Serverの行を削除する方法

メインテーブルでinstead ofトリガを使用していますが、そのメインローに対応する他のテーブルから子ローを最初に削除してから、メインローを削除します。しかし(期待どおり)INSTEAD OFトリガーなので、メイン行は削除されていません。

私が代わりにトリガーの中で主要行を削除しようとすると、私はエラーを取得しています:

INSTEAD OF triggers do not support direct recursion. The trigger execution failed

私はAFTER DELETEトリガーを使用しようとすると、私はエラーを取得:

The DELETE statement conflicted with the REFERENCE constraint [...]

ので、私は他の表の他の行に対応する行を削除しようとしています。

私はこの問題を解決するためのアイデアを考えようとしていましたが、私は立ち往生していて、インターネット上で動作する解決策を見つけることができませんでした。私は何かが分からないと感じていますが、私はそれを見つけることができません。

ありがとう、ご注意ください!

+1

を、これはカスケード削除が(例えば、あなただけの依存関係を削除している)を解決できるようなものですか?または、削除したデータで他のことをやっていますか? – ZLK

+0

@ZLK答えをありがとう!私は答えを聞いたときに私が正会りをすることを知っていた。それは私にとっての解決策ですが、削除前のデータで何か他のことをしたいのであれば、それは別の話になります。 –

+0

制約をチェックしないようにテーブルを変更することもできます。たとえば、 'alter table X nocheck constraint myConstraintName'のようにしてから、delete文/データ操作(例えばafter deleteトリガで)を行い、次に' alter table X check constraint myConstraintName'の制約を元に戻します。 – ZLK

答えて

1

問題はカスケードを使用して@ZLKの助けを借りて解決されましたが削除しますか:

@ZLK: You also have the option of altering the table to not check the constraint. For example, alter table X nocheck constraint myConstraintName , then doing the delete statement/data manipulation (e.g. in an after delete trigger) then turning the constraint back on alter table X check constraint myConstraintName

関連する問題