2

嗨,我正在使用 sql server 2008 r2,我遇到了一个真正的问题。我有一个表 A 和表 B,其中我在表 A 中有一个列 IID 作为主键约束。和相同的列,即表 B 中的 IID 作为外键约束。我有一种情况,我想截断表 A。在运行查询截断表 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用于重置IDENTITY列,则可以执行 aDELETE然后 a DBCC CHECKIDENT('dbo.TableA', RESEED, 1);...

于 2012-06-26T12:07:33.703 回答
1

如果你不能对表 B 做任何事情,那么你将不得不让 SQL Server 验证它没有删除表 B 引用的行。

所以,它很好,很慢,有记录DELETE FROM A

于 2012-06-26T11:51:38.560 回答