2011-10-26 4 views
1

データベースにデータを追加するプロセスがあります。いくつかの列はキーです。プロセスが実行されると、行を削除できるようにする必要があります(つまり、再度実行できます)。しかし、イムは、次のエラーを取得:レコードを削除するときにこのエラーを一時的にオフにするにはどうすればよいですか?

Msg 547, Level 16, State 0, Line 1 The DELETE statement conflicted with the REFERENCE constraint "FK_InviteConfiguration_Invite". The conflict occurred in database "Unilever", table "dbo.InviteConfiguration", column 'InviteID'. The statement has been terminated.

私はどのように私はとにかく削除を強制んテーブル間の参照を設定し、いくつかのキーがあることを参照してください?

+1

RDBMSの味は? SQL Serverのように見えますが、指定してください。 –

+2

これは別の問題の症状ですか? Inviteのレコードを参照する 'InviteConfiguration'レコードがあります。なぜあなたは参照されたレコードを削除しようとしていますか? 'InviteConfiguration'のレコードも削除する必要がありますか?間違ったレコードを削除しようとしていますか? 'InviteConfiguration'のレコードが' Invite'の間違ったレコードを参照していますか?間違っていない場合は、 'InviteConfiguration'のレコードがあなたが削除したいレコードを参照しているのはなぜですか? 'Invite'の参照レコードが削除された後、' InviteConfiguration'の外部キーはどういう意味でしょうか? – MatBailie

答えて

2

I see that there are some keys set with references between the tables how do I just force the deletion anyway?

あなたがこれを行うことができますが、そのおそらくより良いだけで参照テーブル内の行を更新または削除する

ALTER TABLE InviteConfiguration NOCHECK CONSTRAINT ALL 

またはわずかに小さいハンマー

ALTER TABLE InviteConfiguration NOCHECK CONSTRAINT FK_InviteConfiguration_Invite 
2

あなたは制約がON DELETE CASCADE

警告を行うように変更することができます:が、これは主キーを参照するすべてのレコードをカスケード削除でしょう。それがあなたが望むものかどうかを判断するべきです。

+2

これは "それをとにかく削除する"ことはできませんが、それを参照するすべてのレコードも削除されることに注意してください。慎重に使用してください。 – vcsjones

+0

@vcsjones correct – Icarus

1

とあなたがしていますデータの整合性制約を克服するためのハッキングを求めています。これは良い方法ではなく(軽く置く)、問題に別の方法で接近する必要があります。

削除しようとしているレコードに依存する既存のレコード。制約を破ることができれば、彼らは孤立してゴミになるでしょう。それらを削除する前に(それらのレコードが依存するレコードを削除する前に)、またはそれらを削除するのではなく、依存しているレコードの更新を行うだけです。それはすべて、あなたが実装しようとしているbizの論理セマンティクスに依存します。いずれにしても、データの整合性ルールを常に守る必要があります。

ここには役に立つと思われるan SO discussion on this topicがあります。私はポストといくつかの貴重な考慮事項を含む提案を読むことを勧めますが、ハックのいずれかを実装しません。

+0

こんにちは、これはちょうど私がデータをスクラブし、複数回プロセスを繰り返す必要があるテスト目的のためです... – Exitos

関連する問題