使用ALTER TABLE ... WITH CHECK CHECK CONSTRAINT修复损坏的外键

时间:2011-01-17 11:10:03

标签: sql-server foreign-keys

我在SQL Server 2005中有一个损坏的外键。这是一个复制:

CREATE TABLE t2(i2 BIGINT NOT NULL PRIMARY KEY)
CREATE TABLE t1(i1 BIGINT NOT NULL PRIMARY KEY)

ALTER TABLE t1 ADD CONSTRAINT fk FOREIGN KEY (i1) REFERENCES t2 (i2)
ALTER TABLE t1 NOCHECK CONSTRAINT fk

INSERT INTO t1 (i1) VALUES (0)

如果我随后跑了:

ALTER TABLE t1 WITH CHECK CHECK CONSTRAINT fk

我收到错误:

  

ALTER TABLE语句与FOREIGN KEY约束“fk”冲突。冲突发生在数据库“broken-fk”,表“dbo.t2”,列'i2'。

我可以手动解决此问题:

DELETE FROM t1 WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE t2.i2 = t1.i1)
ALTER TABLE t1 WITH CHECK CHECK CONSTRAINT fk

但是我更喜欢一步到位,因为每个人都需要进行表扫描,而且表的大小是几十GB。

是否可以让ALTER TABLE修复错误(通过删除行)而不是退出并显示错误?

感谢。

1 个答案:

答案 0 :(得分:4)

  

是否可以通过ALTER TABLE来修复错误   (通过删除行)而不是退出并出错?

长短 - 没有。 按照您的熟悉,分两步完成。

你可以停在

ALTER TABLE t1 CHECK CONSTRAINT fk

将其打开以获取新记录但仅保留现有数据?