触发器,当更新的某个字段值是Y时候,就不执行某段代码!

时间:2022-03-22 15:08:43
CREATE TRIGGER ANSAICOPTH01 ON [dbo].[COPTH] 
FOR INSERT,update
AS
UPDATE COPTH SET COPTH.UDF51=TH202,COPTH.TH025=(TH035+TH036)/((TH008+TH024)*TH012)
 FROM COPTH

1.这update语句里from copth,我是不是应该用inserted代替?
2.如果th020 = 'Y' or th020 = 'N' 我就不用这个update语句,

期待各位的解答!!!

9 个解决方案

#1


不知道我下面这样写对不对,
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

#2


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 

#3


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 

#4


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

#5


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 

#6


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

#7


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

#8


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动作一次性完成不就处了吗?非搞个触发器来玩,真是她妈好玩呀!!!!!

这是事后发表的,同仁们可以不顶。

#9


不好意思啊,提供的资料不全,让你们困惑了,
因为程序是以前写好的,没有办法修改(要很多钱的)
这个是神舟数码易飞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

#1


不知道我下面这样写对不对,
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

#2


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 

#3


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 

#4


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

#5


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 

#6


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

#7


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

#8


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动作一次性完成不就处了吗?非搞个触发器来玩,真是她妈好玩呀!!!!!

这是事后发表的,同仁们可以不顶。

#9


不好意思啊,提供的资料不全,让你们困惑了,
因为程序是以前写好的,没有办法修改(要很多钱的)
这个是神舟数码易飞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