有一道题:
    在SQL Server 2000中,设某数据库中有商品表(商品号,商品名,进货价格),商品号为主码;销售(商品号,销售时间,销售数量,销售价格,本次利润),商品号和销售时间为主码,销售价格为本次销售商品的单价。现要求每当在销售表中插入前4列数据时(假设一次只插入一行数据),系统自动计算本次销售产生的利润,并将该利润赋给销售表的第5列"本次利润".请编写实现上述功能的后触发型触发器代码。(10分)   参考答案:CREATE TRIGGER update_sale  ON销售表 FORUPDATE  FOREACHROW  ASBEGIN  UPDATE Table_sale SET 本次利润=销售价格-(SELECT 进货价格 FROM 产品表)   END  CREATE TRIGGER Insert_sale  ON销售表FOR INSERT  FOREACHROW  ASBEGIN  INSERT INTO销售表VALUES(new.商品号,new.销售时间, new.销售数量,new.销售价格)   END
疑问:为什么第一个触发器能够被触发了?此向后型触发器需要在发生更新操作的时候才会被触发,但是没有发生更新操作啊? 如题中红色的那里  “进货价格”如何来确定那个数据是当前行的? 还有那个new的用法不怎么理解。sql server数据库table触发器

解决方案 »

  1.   

    new和old是两个固定名字的临时表,只有最近修改的那条记录,insert后新数据就在new表中,Update后两个表都有数据,一个是新值,一个是update前的旧值;delete后只有old。题目中是两个触发器,一个是for update的,一个是for insert的,但后一个有错误,没有就是本次利润。
      

  2.   

    可是问题还是在于如何触发 update的那个触发器啊?用户只有insert操作,但是没有update操作啊?