‘壹’ sql sever中要删除两个相关联的表该怎么进行级联删除
------解决方案-------------------------------------------------------- --1、建立一个触发器(推荐)
create trigger on p for deleteas �0�2delete from spj where pno = (select pno from deleted)go--执行删除delete from p where pname='螺丝'
--2、级联删除
alter table p add constraint pk_p_id primary key (pno)go--为tb创建外健,并指定级联删除
alter table spj add constraint fk_spj_aid foreign key (pno) references p(pno) on delete cascadego------解决方案----------------------------------------------------------推荐触发器控制,可控性比较强
SQL code --1、建立一个触发器(推荐) create trigger on p for delete as delete from spj where pno = (select pno from deleted) go --执行删除 delete from p where pname='螺丝' --2、级联删除 alter table p add constraint pk_p_id primary key (pno) go --为tb创建外健,并指定级联删除 alter table spj add constraint fk_spj_aid foreign key (pno) references p(pno) on delete cascade go
------解决方案--------------------------------------------------------建立测试数据
SQL code if object_id('dbo.SPJ') is not null drop table dbo.SPJ; go if object_id('dbo.P') is not null drop table dbo.P; go create table dbo.P ( pno int not null primary key, pname nvarchar(20) not null ); go create table dbo.SPJ ( sno int not null primary key, pno int not null ); insert into dbo.P select 1, 'type-a' union all select 2, 'type-b' union all select 3, 'type-c'; go insert into dbo.SPJ select 1, 1 union all select 2, 1 union all select 3, 1 union all select 4, 2 union all select 5, 3 union all select 6, 3; go
------解决方案--------------------------------------------------------建议用外键约束
先删除子表在删除父表
------解决方案-------------------------------------------------------- �0�2个人建议用事务处理。
‘贰’ sql多表关联删除
删除多表关联数据的三种方法
1、级联删除
createtablea
(
idvarchar(20)primarykey,
passwordvarchar(20)notnull
)
createtableb
(
idintidentity(1,1)primarykey,
namevarchar(50)notnull,
userIdvarchar(20),
foreignkey(userId)referencesa(id)ondeletecascade
)
表B创建了外码userId 对应A的主码ID,声明了级联删除
测试数据:
insertavalues('11','aaa')
insertavalues('23','aaa')
insertbvalues('da','11')
insertbvalues('das','11')
insertbvalues('ww','23')
删除A表内id为‘11’的数据,发现B表内userId 为“11”也被数据库自动删除了
deleteawhereid='11'
2、采用存储过程
A表:AID Aname 主健:AID
B表:BID BelongAID Bname 主健:BID,外健:BelongAID
C表:CID BelongBID Cname 主健:CID,外健:BelongBID
D表:DID BelongCID Dname 主健:DID,外健:BelongCID
其中:
A表和B表通过A.AID和B.BelongAID 创建了外健关系
B表和C表通过B.BID和C.BelongBID 创建了外健关系
C表和D表通过C.CID和D.BelongCID 创建了外健关系
3、采用触发器
删除Class表中的一条记录的同时删除该记录Class_No字段值在Student表中对应的记录。
CreateTriggerClass_delete
onClass
fordelete
as
begin
deletefromStudent
whereClass_No=(selectClass_Nofromdeleted)
end
‘叁’ sql server中如何级联删除
可以用下边的方法,仅供参考:
--创建测试主表.ID是主键.
CREATETABLEtest_main(
idINTNOTNULL,
valueVARCHAR(10),
PRIMARYKEY(id)
);
--创建测试子表.
CREATETABLEtest_sub(
idINTNOTNULL,
main_idINT,
valueVARCHAR(10),
PRIMARYKEY(id)
);
--插入测试主表数据.
INSERTINTOtest_main(id,value)VALUES(1,'ONE');
INSERTINTOtest_main(id,value)VALUES(2,'TWO');
--插入测试子表数据.
INSERTINTOtest_sub(id,main_id,value)VALUES(1,1,'ONEONE');
INSERTINTOtest_sub(id,main_id,value)VALUES(2,2,'TWOTWO');
然后,创建外键,使用ONDELETECASCADE选项,删除主表的时候,同时删除子表
ALTERTABLEtest_subADDCONSTRAINTmain_id_consFOREIGNKEY(main_id)REFERENCEStest_mainONDELETECASCADE;
执行删除:
DELETEFROMTEST_MAINWHEREID=1;
最后:
SELECT*FROMTEST_MAIN;
结果子表中就只有ID=2的记录,也就说明级联删除成功。
‘肆’ 对Sql Server中的表添加级联更新和级联删除的几种方法
触发器方式: create trigger trg_A on A for update,delete as begin if exists(select 1 from inserted) update B set Name=(select Name from inserted) where Name=(select Name from deleted) else delete B where Name=(select Name from deleted) end go 要使用级联性更新和删除,用户可以在Alter TABLE 语句的CONSTRAINT子句中使用ON Update CASCADE 和/或 ON Delete CASCADE 关键字。注意他们都必须是应用于外键的。 级联更新和级联删除方式: Alter TABLE [dbo].[T_USERGROUP] ADD CONSTRAINT [FK_T_USERGROUP_T_ACCTTEMPLATE] FOREIGN KEY ( [ATNAME] ) REFERENCES [dbo].[T_ACCTTEMPLATE] ( [ATNAME] ) ON Update CASCADE ON Delete CASCADE
‘伍’ SQL 怎么级联删除语句
方法一:
MSSQLSERVER是支持级联更新和级联删除的,你要在建立外键的时候,要指定
EP:
alter table tb_userroles
add constraint FK_TB_USERR_RELATIONS_TB_FUNCT foreign key (gnbm)
references tb_function (gnbm)
on update cascade on delete cascade
方法二:用数据库触发器
‘陆’ SQL server中怎么修改级联删除修改
在创建表的时候就需要设置级联删除和级联更新(修改)。方法如下:
altertableSZ_Picture
addconstraintFK_SZ_PICTU_RELATIONS_SZ_PICTUforeignkey(pictureTypeId)
referencesSZ_PictureType(pictureTypeId)
--其中这句就是级联更新和级联删除
级联删除:
删除包含主键值的行的操作,该值由其它表的现有行中的外键列引用。在级联删除中,还删除其外键值引用删除的主键值的所有行。
级联更新:
更新主键值的操作,该值由其它表的现有行中的外键列引用。在级联更新中,更新所有外键值以与新的主键值相匹配。