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
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
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
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'这种全部不更新,还是只这部分不更新
是有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
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,如果你认为我说错了的话,你就先去看看书吧。
一、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动作一次性完成不就处了吗?非搞个触发器来玩,真是她妈好玩呀!!!!!
这是事后发表的,同仁们可以不顶。
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
因为程序是以前写好的,没有办法修改(要很多钱的)
这个是神舟数码易飞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
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
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
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'这种全部不更新,还是只这部分不更新
是有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
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,如果你认为我说错了的话,你就先去看看书吧。
一、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动作一次性完成不就处了吗?非搞个触发器来玩,真是她妈好玩呀!!!!!
这是事后发表的,同仁们可以不顶。
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
因为程序是以前写好的,没有办法修改(要很多钱的)
这个是神舟数码易飞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