不知道我下面这样写对不对,
CREATE TRIGGER ANSAICOPTH01 ON [dbo].[COPTH] 
FOR INSERT,update 
AS
beigin 
 if (select count(*) from inserted where th020 ='Y' or th020 = 'N')=0 
   UPDATE COPTH SET COPTH.UDF51=TH202,COPTH.TH025=(TH035+TH036)/((TH008+TH024)*TH012) 
   FROM inserted
  else end

解决方案 »

  1.   

    CREATE TRIGGER ANSAICOPTH01 ON [dbo].[COPTH] 
    FOR INSERT,update 
    AS 
    if not exist (select 1 from inserted where th020 ='Y' or th020 = 'N') 
      beigin 
      UPDATE COPTH SET COPTH.UDF51=TH202,COPTH.TH025=(TH035+TH036)/((TH008+TH024)*TH012) 
      FROM inserted 
      end
    else 
    begin
    end 
      

  2.   

    CREATE TRIGGER ANSAICOPTH01 ON [dbo].[COPTH] 
    FOR INSERT,update 
    AS 
    if exist (select 1 from inserted where th020 ='Y' or th020 = 'N') UPDATE COPTH SET COPTH.UDF51=TH202,COPTH.TH025=(TH035+TH036)/((TH008+TH024)*TH012) 
    FROM inserted 
      

  3.   

    表结构帖出来,要不没发写。
    是有th020 ='Y' or th020 = 'N'这种全部不更新,还是只这部分不更新
      

  4.   

    CREATE TRIGGER ANSAICOPTH01 ON [dbo].[COPTH] 
    FOR INSERT,update 
    AS 
    if exist (select 1 from inserted where th020 ='Y' or th020 = 'N') UPDATE COPTH SET COPTH.UDF51=TH202,COPTH.TH025=(TH035+TH036)/((TH008+TH024)*TH012) 
    FROM inserted 
      

  5.   

    我想发表两点:
    一、INSERTED 的插入动作都还没有完成,就想去UPDATE?真是天上会掉钱下来啊,
    建议楼猪分开写,一个INSTEAD OF INSERT ,一个FOR UPDATE,
    二、一条记录刚INSERTED进去就要进行UPDATE,我也是觉得这是很好笑的?先在前台程序里就搞好,好不好啊?
    三、我发表上述言论是因为我看到你的TRIGGER写的是ON COPTH 然后又UPDATE COPTH,如果你认为我说错了的话,你就先去看看书吧。
      

  6.   

    四、一般情况下,FOR INSERT 需要加TRIGGER是因为要去更新外键表,而不是当前插入行的表。
    我的说话完了,一共四点。希望同仁们把我的回贴顶得比楼主的还要高。
      

  7.   

    CREATE TRIGGER ANSAICOPTH01 ON [dbo].[COPTH] 
    FOR INSERT,update 
    AS 
    if exist (select 1 from inserted where th020 ='Y' or th020 = 'N') 
    UPDATE COPTH SET COPTH.UDF51=TH202,COPTH.TH025=(TH035+TH036)/((TH008+TH024)*TH012) 
    FROM inserted 
    这些语句你们自己有没有用过啊?不用INSERTED OF INSERT,你们认识能执行吗?书上教你们的,老师教你们的,都放到哪儿去了呢?INSERTED的动作是一直要等你的触发器先完成动作,才会去执行的吧?大爷们?我心痛啊,不过我刚开始学的时候也是这样写的,但是我现在改了。一般不用触发器更改本表数据,要更改,直接用UPDATE就行了,用个触发器,跟鸟一样的。FOR UPDATE,你这个UPDATE动作一次性完成不就处了吗?非搞个触发器来玩,真是她妈好玩呀!!!!!这是事后发表的,同仁们可以不顶。
      

  8.   

    不好意思啊,提供的资料不全,让你们困惑了,
    因为程序是以前写好的,没有办法修改(要很多钱的)
    这个是神舟数码易飞erp的销货单的明细表,有些字段是我们后来添加进去的
    主键是th001,th002
    当我们添加数据时,因为有些后来添加的字段没有数据,必须要写触发器,才能更新啊,
    为了减少触发器更新数据库的频率,只有当要insert,update记录的字段th020='Y' or 'N'时,
    才会触发啊,不然现在几个人同时操作时,服务器跑不动啊,
    审计一个单要20分钟,因为每插入一条记录,就要更新全表啊。
    当然现在我修改成一下这样子,就没有什么影响了CREATE TRIGGER ANSAICOPTH01 ON [dbo].[COPTH] 
    FOR INSERT,update 
    AS 
    if exist (select 1 from inserted where th020 ='Y' or th020 = 'N')
      begin 
        UPDATE COPTH SET COPTH.UDF51=TH202,COPTH.TH025=(TH035+TH036)/((TH008+TH024)*TH012) 
        FROM COPTH,inserted i where copth.th001 = i.th001 and copth.th002 = i.th002
      end