求个简单触发器
我在MSSQL里写一个触发器[SumMoney],针对Update触发的,表 abc 字段如下:
m1 m2 m3 sumMoney
1 2 3 6
5 4 3 12
我想要的效果是当用户更改m1或m2或m3的值时,Update触发器就进行统计,将m1+m2+m3的和写到对应的列sumMoney中。下面是我写的:
CREATE TRIGGER SumMoney ON dbo.abc
FOR UPDATE
AS
update [dbo].[abc] set sumMoney=m1+m2+m3
以上的代码应该是不管改了哪行,触发器都会将所有行都求和一遍,请问我如何只对更改的行求和呢?
------解决方案--------------------这个表你需要加一个主键(如id)
update [dbo].[abc] set sumMoney=m1+m2+m3 where id in (select id from deteled)
你要加个条件限制你是计算 更新过的纪录,
更新过的纪录存在于deteled表中
------解决方案--------------------/*你表应该要有一个主键如id或者其它*/
---创建测试环境
Create Table 测试表(id int,m1 int,m2 int,m3 int,sumMoney int)
Insert 测试表 Select 1,1, 2, 3, 6
Union All Select 2,5, 4, 3, 12
Select * From 测试表
---创建触发器
Create Trigger Tri_Sum On 测试表
For Update
As
If Update(m1) Or Update(m2) Or Update(m3)
Begin
Update T Set T.SumMoney=T.m1+T.m2+T.m3
From 测试表 T
Inner Join Inserted i On T.id=i.id
Inner Join Deleted d On T.id=d.id
End
GO
---更新表
Update 测试表 Set m1=2 Where id=1
Update 测试表 Set m3=1 Where id=2
---查看更新后的数据
Select * From 测试表
--结果
/*
id m1 m2 m3 sumMoney
----------- ----------- ----------- ----------- -----------
1 2 2 3 7
2 5 4 1 10
(所影响的行数为 2 行)
*/