2

こんにちは、私は sql server 2008 r2 を使用しています。本当の問題があります。テーブル A とテーブル B があり、主キー制約としてテーブル A に列 IID があります。同じ列、つまりテーブル B の IID を外部キー制約として使用します。テーブル A を切り捨てたい状況があります。クエリ Truncate table A の実行中に、次のエラーが表示されます。

Msg 4712, Level 16, State 1, Line 1 
Cannot truncate table 'A' because it is being referenced by
a FOREIGN KEY constraint.

私の問題テーブルBでDMLおよびDDL操作を実行できません。テーブルAを切り捨てるにはどうすればよいですか? ありがとう!高度な。

4

2 に答える 2

5

切り捨てを許可する唯一の方法は、テーブル A に対する外部キー制約を削除することです。制約が無効になっているか、両方のテーブルが空の場合でも、SQL Server はそれを許可しません。したがって、外部キーの定義が手元にある場合は、次のことができます。

ALTER TABLE dbo.TableB DROP CONSTRAINT FK_whatever;

TRUNCATE TABLE dbo.TableA;

ALTER TABLE dbo.TableB ADD CONSTRAINT FK_Whatever
  FOREIGN KEY ...;

そうでなければ、@Damienが言うように、「本物の問題」の解決策は、のDELETE代わりに使用することですTRUNCATE。を使用して列のTRUNCATEリセットも行っていた場合は、aを実行してから...を実行できます。IDENTITYDELETEDBCC CHECKIDENT('dbo.TableA', RESEED, 1);

于 2012-06-26T12:07:33.703 に答える
1

テーブルBに対して何もできない場合は、SQLServerにテーブルBによって参照されている行が削除されていないことを検証させる必要があります。

だから、それはいいです、遅い、ログに記録されますDELETE FROM A

于 2012-06-26T11:51:38.560 に答える