SQL数据库怎么进行多表级联更新,求个存储过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL数据库怎么进行多表级联更新,求个存储过程相关的知识,希望对你有一定的参考价值。

表1:表1ID,flag
表2:表2ID,表1ID,flag
表3:表3ID,表1ID,flag
表4:表4ID,表3ID,flag
表5:表5ID,表3ID,flag
表6:表6ID,表3ID,flag
我是对表进行逻辑删除,flag=1的时候就是已经删除的记录,实际上就是更新记录,其实表不止这么多,我想达到的效果是,根据表1ID删除表1的记录时,将表1有所关联的记录都进行删除,求一个存储过程代码,或者触发器代码,我要代码,不要跟我说什么理论,我不是叫兽。

方法、过程如下:
在每个数据库的table1\table2都建立插入、删除、修改触发器
如在A1上
ceate trigger dbo.table1_u on A1.dbo.table1 for insert,update,delete as
IF @@rowcount = 0 RETURN

declare @no_i int -- 假设no为关键字
--declare 其他字段

declare @no_d int -- 假设no为关键字
--declare 其他字段

--赋值
select @no_i =no ,--其他值
from inserted
select @no_d =no ,--其他值
from deleted

--判断@no_d,@no_i 是否在A2,A3,A4,A5的表中存在
--1、如果@no_d,@no_i 都存在,则用新值更新A2,A3,A4,A5的talbe1
--2、如果@no_d不存在@no_i存在,则将新值插入A2,A3,A4,A5的talbe1
--3、如果@no_d存在@no_i不存在,则删除A2,A3,A4,A5的talbe1对应的值
if exists(select 1 from A2.dbo.talbe1 where no = @no_d) and
exists(select 1 from A2.dbo.talbe1 where no = @no_i)
begin
--修改A2数据库的表
end
参考技术A create proc aa
@ID    int
as
begin
update  表1 set flag=1  where 表1ID=@ID
 
update 表2 set flag=1  from 表1 a,表2  b where a.表1ID.=b.表1ID and a.表1ID=@ID
 
update 表3 set flag=1  from 表1 a, 表3  c where a表1ID.=c.表1ID and a.表1ID=@ID
 
update 表4 set flag=1  from 表1 a,表3  b,表4 c  where a表1ID.=b.表1ID and c.表3ID =b.表3ID and a.表1ID=@ID
 
update 表5 set flag=1  from 表1 a,表3  b,表5 c  where a表1ID.=b.表1ID and c.表3ID =b.表3ID and a.表1ID=@ID
 
update 表6 set flag=1  from 表1 a,表3  b,表6 c  where a表1ID.=b.表1ID and c.表3ID =b.表3ID and a.表1ID=@ID
end
---执行---
--exec aa 1

本回答被提问者采纳
参考技术B go
create trigger gx on 表1
for delete
as
update 表2 set flag=1 where id= (select id from deleted)
update 表3 set flag=1 where id= (select id from deleted)
update 表4 set flag=1 where id= (select id from deleted)
...

SQL 怎么级联删除语句

三个表A→B→C(A对B是一对多,B对C是一对多)
我想删除A表的一条数据后 级联删除B表和 B表多对应的数据

例:就是(删除 火车表 的一条数据) 删除后,会(删除所有的车厢表),删除后, 会删除所有的车厢椅子......

谢谢大家 急用

方法一:
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
方法二:用数据库触发器
参考技术A 你是什么数据库,Oracle的话,如果父表和子表之间有外键约束关系,那么可以再删除主表指定的数据的时候,加上ON DELETE CASCADE ,当父表记录删除的时候自动删除子表中的相应记录. 参考技术B 级联删除在建表的时候就应该指定。 参考技术C 触发器中处理

以上是关于SQL数据库怎么进行多表级联更新,求个存储过程的主要内容,如果未能解决你的问题,请参考以下文章

在java程序中,如何做到多表级联删除?

Kettle的多表级联

多表级联统计

MySQL基本使用(内容较多建议熟读并背诵)

thinkphp在关联模型中三表级联查询

MySQL主表与副表级联操作及多表查询(两张独立表,一张关系表)