データを含む300個のテーブルで構成されるデータベースがあります。各テーブル内のすべてのデータを削除する必要があります。すべてのテーブルを切り捨てようとしましたが、テーブルの列の1つが外部キーであるため、プロセスを完了できないというエラーが発生しました。私の問題を解決する他の方法はありますか?ありがとう。
質問する
7380 次
2 に答える
4
次のいずれかを行う必要があります。
- すべての外部キーを削除し、切り捨ててから、FKを再作成します。
- すべての外部キーを無効にし、(切り捨てではなく)削除してから、FKを再度有効にします。また、
- 最初に子テーブルから削除します。
幸運にも循環参照があれば後者は不可能かもしれませんし、循環参照がなくても複雑になる可能性があります。最初の2つも比較的複雑ですが、最近、別のユーザーの非常によく似た問題を解決しました(適切な削除順序を決定するよりも、これらの方が簡単だと思います)。
もう1つのアイデアは、より単純でより完全なワイプを実行することです。
- テーブル(および明らかに他のオブジェクト)をスクリプト化し、データベースを削除して再作成します。また、
- データベースのコピーを作成し、Visual Studio / SSDTまたはサードパーティのスキーマ比較ツールを使用して、空のデータベースにすべてのオブジェクトを作成します(その後、古いデータベースを削除して新しいデータベースの名前を変更できます)。
于 2012-08-07T02:45:52.680 に答える
-1
これを試してください:それを行う簡単な方法。sp_msforeachtable
は文書化されていないSPであるため、それらを使用することにはリスクがあります。私は、アーロンロジックを使用して、彼の回答で使用されている制約を無効にすることで、この回答を思いつきました。
use [YourDB]
Go
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'Truncate Table ?'
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
于 2012-08-07T03:05:12.613 に答える