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

Vik*_*ore 2 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.
Run Code Online (Sandbox Code Playgroud)

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

Aar*_*and 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 ...;
Run Code Online (Sandbox Code Playgroud)

否则@Damien说你的"真正问题"的解决方案是使用DELETE而不是TRUNCATE.如果您还使用TRUNCATE重置IDENTITY列,则可以执行a DELETE然后执行DBCC CHECKIDENT('dbo.TableA', RESEED, 1);...