日期:2014-05-18 浏览次数:20643 次
/* 标题:两表通过字段关联进行级联删除。 作者:爱新觉罗·毓华(十八年风雨,守得冰山雪莲花开) 时间:2008-11-20 地点:广东深圳 */ create table ta(id int not null) create table tb(id int , aid int) insert into ta values(1) insert into ta values(2) insert into tb values(1 , 1) insert into tb values(2 , 2) insert into tb values(3 , 1) go --一、查看原始数据 --ta表的原始数据 select * from ta /* id ----------- 1 2 */ --tb表的原始数据 select * from tb /* id aid ----------- ----------- 1 1 2 2 3 1 */ --二、看看没有创建级联删除时的情况(删除ta表id=1的数据,看看是否影响tb表) delete from ta where id = 1 select * from ta /* id ----------- 2 */ select * from tb /* id aid ----------- ----------- 1 1 2 2 3 1 */ --三、恢复原始数据,创建级联删除,删除ta表id=1的数据,看看是否影响tb表 insert into ta values(1) --为ta创建主健 alter table ta add constraint pk_ta_id primary key (id) go --为tb创建外健,并指定级联删除 alter table tb add constraint fk_tb_aid foreign key (aid) references ta(id) on delete cascade go delete from ta where id = 1 select * from ta /* id ----------- 2 */ select * from tb /* id aid ----------- ----------- 2 2 */ --删除级联约束 alter table tb drop constraint fk_tb_aid go --删除测试表 drop table ta , tb go
------解决方案--------------------
delete from record
where raidfrom in (select aid from account where acid = @acid)
delete from record
where raidto in (select aid from account where acid = @acid)
deleft from account where acid = @acid
------解决方案--------------------
先删除外键的表,再操作其他的
------解决方案--------------------
如果不想麻烦的在删除信息的时候先删除外键的表,可以在建立外键的时候指定级联删除,这样SQLServer会帮你自动将与其关联的外键信息全部删除,但是缺点也很明显,你无法控制删除过程了,整个过程是由数据库自动进行的。
ALTER TABLE 表名 ADD CONSTRAINT FK_表名_外键名 FOREIGN KEY (外键) REFERENCES 表2(键名) ON DELETE CASCADE