高分求触发器,不够再加

muders 2003-05-20 04:52:00
现在有两个表,T1、T2
T1:Id、Price、Quality
T2:Id、TotalMoney
要求保证对于Id相同时,不论T1发生Inster、Delete还是UpDate(不改变Id),都能保证T2中的TotalMoney都等于T1中所有对应Id下的全部纪录中Price和Quality的积的和。就是对T1中的指定Id的Price * Quality的值求和,使T2中的TotalMoney与之相等
谢了
...全文
39 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
muders 2003-05-22
  • 打赏
  • 举报
回复
发分了,麻烦看看另外一个
http://expert.csdn.net/Expert/topic/1816/1816716.xml?temp=.2939112(简化版)
呵呵,小弟系新手,望指点
愉快的登山者 2003-05-20
  • 打赏
  • 举报
回复
CREATE TRIGGER t_1 ON t1
FOR INSERT, delete, update
AS
if exists (select * from t2, inserted where t2.id = inserted.id)
update t2 set TotalMoney = t2.TotalMoney + (select sum(price * quality) from inserted where inserted.id = t2.id) from t2
else
insert t2 select id, sum(price * quality) from inserted group by id

if exists (select * from t2, deleted where t2.id = deleted.id)
update t2 set TotalMoney = t2.TotalMoney - (select sum(price * quality) from deleted where deleted.id = t2.id) from t2
joygxd 2003-05-20
  • 打赏
  • 举报
回复

Create Trigger Intr On T1
For Insert
As
if exists( (select id from inserted) in (select id from t1 ))
update t2
set totalmoney=(Select Sum(Price*Quality) From T1 Where ID=(select id from inserted))
where ID = (Select ID From Inserted)
else
Insert Into T2
Select ID,Sum(Price*Quality)
from t1
Where ID In (Select ID From Inserted)
Group By ID
end

Create Trigger Uptr On T1
For update
As
update t2
set totalmoney=(Select Sum(Price*Quality) From T1 Where ID=(select id from updated))
where ID = (Select ID From updated)

Create Trigger Detr On T1
For delete
As
if exists( (select id from deleted) in (select id from t1 ))
update t2
set totalmoney=(Select Sum(Price*Quality) From T1 Where ID=(select id from deleted))
where ID = (Select ID From deleted)
else
delete t2
where ID In (Select ID From Deleted)
end
triout 2003-05-20
  • 打赏
  • 举报
回复
Create Trigger InsRec On T1
For Insert
As
Insert Into T2 (ID,TotqlMoney) Select ID,Sum(Price*Quality) Where ID In (Select ID From Inserted) Group By ID

Create Trigger UpdRec On T1
For Update
As
Update A Set TotalMoney=(Select Sum(Price*Quality) From T1 B Where B.ID=A.ID) From T2 A Where A.ID In (Select ID From Inserted)

Create Trigger DelRec On T1
For Delete
As
Declare @rsCount Int
Select @rsCount=(Select Count(*) From T1 Where ID In (Select ID From Deleted))
Case
When @rsCount>0
Update A Set TotalMoney=(Select Sum(Price*Quality) From T1 B Where B.ID=A.ID) From T2 A Where A.ID In (Select ID From Deleted)
Else
Delete From T2 Where ID In (Select ID From Deleted)
End
pengdali 2003-05-20
  • 打赏
  • 举报
回复
CREATE TRIGGER 名1 ON t1
FOR INSERT
AS
insert t2 select id,sum(price*quality) from t2 where id in (select id from inserted)
and id not in (select id from t2) group by id
update t2 set totalmoney=tem.aa from (select id,sum(price*quality) aa from t1 where id in (select id from inserted)
group by id) tem where tem.id=t2.id


CREATE TRIGGER 名2 ON t1
FOR update
AS
update t2 set totalmoney=tem.aa from (select id,sum(price*quality) aa from t1 where id in (select id from inserted)
group by id) tem where tem.id=t2.id


CREATE TRIGGER 名3 ON t1
FOR delete
AS
update t2 set totalmoney=tem.aa from (select id,sum(price*quality) aa from t1 where id in (select id from deleted)
group by id) tem where tem.id=t2.id
--如果为0的要被删掉就加下面这句
delete t2 where totalmoney<=0
a1n1 2003-05-20
  • 打赏
  • 举报
回复
create trigger tr
on t1
for Inster,Delete,UpDate
as
begin
declare @total int
set @total=sum(t1.Price * t1.Quality)
update t2
set TotalMoney=@total
from t1,t2
where (t1.id=t2.id)
group by id
end

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧