sql 难题 求解!
现在有表A:
代号 父代号 名称 数量
001 0 电焊 5
001001 001 车工 2
001002 001 机车 3
002 0 汽车 5
002001 002 坦克 5
003 0 飞机 6
现在想用触发器实现:
1.每当对数据进行增删改的时候,数据自动进行逐级汇总。
比如:当插入一条数据 代号 是001003 的时候,电焊 会自动汇总他下面的数量,如:001003的数量是2 则 电焊的数量应该是7.
2.表里的数据是变化的。就是希望当有数据进行操作时,各个父及会自动汇总,希望高手写的详细点。本人新手,谢了!!!
只要运行通过。马上结贴!!!
[解决办法]
create table tb(代号 nvarchar(20),父代号 nvarchar(20),名称 nvarchar(20),数量 int)
insert into tb select '001','0','电焊',5
insert into tb select '001001','001','车工',2
insert into tb select '001002','001','机车',3
insert into tb select '002','0','汽车',5
insert into tb select '002001','002','坦克',5
insert into tb select '003','0','飞机',6
go
create trigger whereinsert
on tb
after insert
as
begin
update tb set 数量=b.数量+a.数量 from tb b inner join inserted a on b.代号=a.父代号
end
go
create trigger whereupdate
on tb
after update
as
begin
update tb set 数量=b.数量+a.数量-c.数量 from tb b inner join inserted a on b.代号=a.父代号 inner join deleted c on b.代号=c.父代号
end
go
create trigger wheredelete
on tb
after delete
as
begin
update tb set 数量=b.数量-c.数量 from tb b inner join deleted c on b.代号=c.父代号
end
go
insert into tb select '003001','003','喷气式客机',10
select * from tb
update tb set 数量=3 where 代号='003001'
select * from tb
delete from tb where 代号='003001'
select * from tb
go
drop table tb
/*
代号 父代号 名称 数量
-------------------- -------------------- -------------------- -----------
001 0 电焊 5
001001 001 车工 2
001002 001 机车 3
002 0 汽车 5
002001 002 坦克 5
003 0 飞机 16
003001 003 喷气式客机 10
(7 行受影响)
(1 行受影响)
(1 行受影响)
代号 父代号 名称 数量
-------------------- -------------------- -------------------- -----------
001 0 电焊 5
001001 001 车工 2
001002 001 机车 3
002 0 汽车 5
002001 002 坦克 5
003 0 飞机 9
003001 003 喷气式客机 3
(7 行受影响)
(0 行受影响)
(1 行受影响)
(1 行受影响)
代号 父代号 名称 数量
-------------------- -------------------- -------------------- -----------
001 0 电焊 5
001001 001 车工 2
001002 001 机车 3
002 0 汽车 5
002001 002 坦克 5
003 0 飞机 6
(6 行受影响)
*/
create table tb (代号 varchar(100),父代号 varchar(100),名称 varchar(10),数量 int)
insert tb select '001','0','电焊',5 union all
select '001001','001','车工',2 union all
select '001002','001','机车',3 union all
select '002','0','汽车',5 union all
select '002001','002','坦克',5 union all
select '003','0','飞机',6
go
create trigger abc on tb
after insert
as
declare @temp varchar(50),@qty int
select @temp=代号,@qty=数量 from inserted
while len(@temp)>3
begin
set @temp=substring(@temp,1,len(@temp)-3)
update tb set 数量=数量+@qty where 代号=@temp
end
go
insert tb select '001003','','',2
go
select * from tb
/*
0010电焊7
001001001车工2
001002001机车3
0020汽车5
002001002坦克5
0030飞机6
001003 2
*/