如果我们对另一个表中的列有外键约束,如何截断主键表?

时间:2012-06-26 11:49:11

标签: sql-server-2008 sql-server-2008-r2

您好我正在使用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.

我的问题我不能做任何DML&表B上的DDL操作 我怎么能截断表A? 谢谢!在先进。

2 个答案:

答案 0 :(得分: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列,则可以执行DELETE,然后执行DBCC CHECKIDENT('dbo.TableA', RESEED, 1); ...

答案 1 :(得分:1)

如果您无法对表B执行任何操作,那么您将不得不让SQL Server验证它不会删除表B所引用的行。

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