在网上找的相关sql语句,一个关闭所有,一个打开所有,但我在关闭后,插入一条记录,如果这个记录不符合两个表的关系,在打开关系后怎样让这个记录回滚回去,现在的情况是这记录插入进去了。
ALTER TABLE table NOCHECK CONSTRAINT ALLALTER TABLE table CHECK CONSTRAINT ALL
ALTER TABLE table NOCHECK CONSTRAINT ALLALTER TABLE table CHECK CONSTRAINT ALL
drop table ftab;
go
create table ftab (id int primary key, c char(1));
go
insert into ftab values(1,'A'), (2,'B'), (3,'C');
goif OBJECT_ID('ctab') is not null
drop table ctab;
go
create table ctab (id int identity, fid int constraint fk_ctab_id references ftab(id));
go
insert into ctab(fid) values(1),(2),(3);
go-- 禁用外键约束
alter table ctab nocheck constraint fk_ctab_id;
-- 插入不匹配记录
insert into ctab(fid) values(5);
-- 启用外键约束,但是不会检测表中当前的数据是否满足外键约束
alter table ctab check constraint fk_ctab_id;-- 删除不匹配的记录
delete from ctab where fid not in (select id from ftab);
ALTER TABLE table with check CHECK CONSTRAINT ALL