0

Sql Server 2005のMSDN ドキュメントから直接:

次のようなテーブルでは TRUNCATE TABLE を使用できません。

  • FOREIGN KEY 制約によって参照されます。
  • インデックス付きビューに参加します。
  • トランザクション レプリケーションまたはマージ レプリケーションを使用して発行されます。

a の効果TRUNCATE(具体的には type 列をリセットするという事実IDENTITY) が必要ですが、データベースの他の場所でテーブルが外部キーによって参照されているため、私の場合は使用できません。

更新:これは、参照テーブルもクリアするテスト構成のためのものであるため、外部キーの整合性は問題になりません。

これを回避するには、他にどのような方法がありますか?

4

4 に答える 4

1

すべての行を削除してから、DBCC CHECKIDENT (Tablename, RESEED, 0) を実行して ID シードをリセットできます

ただし、DELETE は完全にログに記録されますが、TRUNCATE は最小限のログに記録されるため、何倍も高速になります。

別のオプションは、外部キー制約を削除して切り捨てを行い、外部キー制約を再作成することです

于 2010-02-05T19:37:00.200 に答える
1

外部キーによって参照されているという事実は、テーブルを切り捨てる必要がないか、孤立したレコードを作成する手がかりです。これが、外部キーが存在する場合にテーブルの切り捨てが許可されない理由です。

正しいプロセスは、最初に参照されたレコードがある場合はそれを削除し、次に FK 制約を削除し、次にテーブルを切り詰めてから fk 制約を元に戻すことです。ステップ 1 をスキップすると、oldid 100 を指しているレコードが、たまたま 100 に割り当てられた新しいレコードを指しておらず、一致するはずのレコードではないというデータ整合性の悪夢が発生します。

于 2010-02-05T19:42:33.263 に答える
0

外部キーを削除し、テーブルを切り捨ててから、外部キーを再作成できます。

于 2010-02-05T19:37:45.020 に答える
0

制約を削除し、テーブルを切り捨ててから、制約を追加し直す必要があります。ただし、これには細心の注意を払う必要があります。FK 参照をドロップするテーブルに行がある場合、それらの行が削除されるか、他のテーブルの FK 列がクリアされるまで、追加することはできません。

于 2010-02-05T19:40:21.863 に答える