请帮忙看看这个触发器那里有有关问题,本来是更新触发,现在插入,更新都触发

请帮忙看看这个触发器那里有问题,本来是更新触发,现在插入,更新都触发。

CREATE TRIGGER [amt_total] ON dbo.d_stock
FOR UPDATE 
AS
 if(exists(select d_sto_qty,d_up  from inserted where isnull(d_sto_qty,0)>0 and isnull(d_up,0)>0))
          update d_stock set
          d_sto_amt=round(d_sto_qty*d_up,4)



本来想要的结果是 当d_stock表中的,任何一行 d_sto_qty,d_up这2个字段发生改变的时候,自动计算d_sto_amt,没有改变的不计算。

现在问题是,一条新插入的数据,当d_sto_qty,d_up都有值的时候,也马上触发了。

请大家帮我改一下,改成插入的时候不触发,当d_sto_qty,d_up两个字段,其中任何一个字段的值发生改变的时候触发,谢谢。
------解决思路----------------------
增加下面的代码(假设id是表d_stock的主键)

declare @id_i int,@id_d int
select @id_i=id from inserted
select @id_d =id from deleted
if @id_i is not null and @id_d is not null --更新操作
begin
      ---执行你上面的东东
end


插入,inserted表有记录
更新(update)=delete+insert

------解决思路----------------------
不清楚你的具体业务,不过,我觉得你的代码可以这样
CREATE TRIGGER [amt_total] ON dbo.d_stock
FOR UPDATE 
AS
UPDATE T1
SET d_sto_amt=round(T1.d_sto_qty*T1.d_up,4)
FROM d_stock T1
JOIN INSERTED T2 ON T1.d_id=T2.d_id
WHERE T2.d_sto_qty>0 AND T2.d_up>0
GO