1

私は、データベースをアップグレードして、パッケージ化された製品の最新バージョンで実行するために、多数のスキーマ変更をテストしている最中です。

この時点では、データベースに含まれるデータには関心がなく、スキーマ (つまり、テーブル、ビュー、制約、キー、ストアド プロシージャなど) だけに関心があります。

私のテストでは、スクリプトの実行、エラーの解決、スクリプトの再実行が必要です。スクリプトを再実行する場合は、最初にデータベースを復元して既知の状態に戻す必要があります。データベースには大量のデータがあるため、データベースの復元には非常に時間がかかります。データベースを「スリム化」して、できるだけ多くのデータを削除したいと思います。そうすれば、データベースを復元してスクリプトを再実行するのが速くなります

多くのテーブルからレコードを削除しようとすると (「テーブル名から削除」)、制約エラーが発生し、コマンドが停止します。

コマンドを続行して、事実上、制約の問題がないテーブル内のすべてのレコードを削除する方法はありますか? 言い換えれば、コマンドでエラーを無視して、削除できるすべてのレコードを引き続き削除したいと考えています。

どんな提案でも大歓迎です。

4

1 に答える 1

0

上記のバイロンは良い点を述べています。ALTER TABLE コマンドを使用して、FOREIGN KEY または CHECK 制約を無効にすることができます。

ALTER TABLE TableName NOCHECK CONSTRAINT ALL

それからあなたの仕事をしてください、そして終わったら、

ALTER TABLE TableName CHECK CONSTRAINT ALL

制約を再度有効にします。 ただし、注意してください: データを矛盾した状態のままにして、制約を再度有効にした後で制約に違反すると、制約エラーが原因で将来の更新が失敗する可能性があります。

ソース:
http://weblogs.sqlteam.com/joew/archive/2008/10/01/60719.aspx

http://technet.microsoft.com/en-us/library/ms190273.aspx

于 2013-03-08T21:21:04.240 に答える