2011-10-25 13 views
-2

QA SQLサーバーデータベース用の小さなdb-cleanerアプリケーションを構築しています。当然ながら、私はそれらに依存するテーブルの行を削除する必要があります。明示的にすべての依存関係を明示的に参照せずにカスケードを削除

T-SQLのカスケード機能は非常に限られているので、NHibernateを使用して問題を簡素化しようとしました。しかし、私がこれで見つけた唯一の方法は、各依存関係のコレクションをオブジェクト削除の に作成し、それをcascade = deleteとマークすることでした。

これは、私が他の目的で必要としないたくさんのコレクション(hbmファイルとC#オブジェクトの両方)を作成することを意味します。これは、SQLを使用するだけでこの方法を複雑にします。

何か不足していますか?削除カスケードを実行するための、より簡単で汎用的な方法はありますか?

ありがとうございました。

EDIT:明らかに、DB内の外部キーの変更は、生産DBと同じに設計されたQA DBであるため、変更しないでください。

は、この男は、再帰的なあなたのためのすべての作業を行いSP書いた:

http://www.sqlteam.com/article/performing-a-cascade-delete-in-sql-server-7

必要少しタッチアップを(

+3

依存関係が定義されています*お使いの外部キー*で。それは非常に単純です:列挙は必要ありません、データベース内の適切なDRI。何がもっと必要ですか? – gbn

+0

私はあなたが何を意味しているか分かりません。 FKはDB内にDELETE CASCADEとマークされていないため、本番DBと同一である必要があり、本番DBは明らかな理由でカスケードをサポートしていません。 – Tomata

+0

したがって、非生産時のFKを変更してください。 – gbn

答えて

0

は最終的に私が削除を行うための一般的な方法を見つけました私のDBはスキーマを使用しているので)、魅力のように動作します。

0

データベースの関連テーブル間に外部キーが定義されているとしますか? 親レコードが削除されているときに、関連するレコードで何が起こるべきかを外部キーレベルで指定できます。
は、カスケーディングオプションについては、MSDNをチェックアウトし、それらを定義する方法:

Cascading FK constraints

Foreign Key Constraints

+0

私が言及したように、db構造の変更はオプションではありません。 – Tomata

関連する問題