您好我正在使用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? 谢谢!在先进。
答案 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
。