instead of insert生效后,同一个表的after insert 还能生效吗?
create trigger insertTrigger1
on ARSKDFTMX
instead of insert
as
IF EXISTS (SELECT 1 FROM inserted WHERE inserted.ARSKDFTMX_FKRBH<>inserted.ARSKDFTMX_XM08 )
begin
print '付款人与明细行客户不同,请修改明细'
(这里如果不存在,还需要重新写插入临时表数据到ARSKDFTMX表吗,还是说会继续执行插入语句)
end
create trigger insertTrigger
on ARSKDFTMX
after insert
as
update SOPTItems set ReceiptValue=INSERTED.ARSKDFTMX_XM04+INSERTED.ARSKDFTMX_XM05,TransReceiptValue=INSERTED.ARSKDFTMX_XM04+INSERTED.ARSKDFTMX_XM05 from INSERTED where INSERTED.ARSKDFTMX_XM01=SOPTItems.ID
update SOPTItems set ReceiptFlag='1' from INSERTED where INSERTED.ARSKDFTMX_XM01=SOPTItems.ID and SOPTItems.TaxInValue>SOPTItems.ReceiptValue
update SOPTItems set ReceiptFlag='2' from INSERTED where INSERTED.ARSKDFTMX_XM01=SOPTItems.ID and SOPTItems.TaxInValue=SOPTItems.ReceiptValue
end
该回答引用chatGPT:仅供参考
在SQL Server中,当使用`INSTEAD OF INSERT`触发器时,插入操作将由触发器完全接管。这意味着在`INSTEAD OF INSERT`触发器中,您需要手动处理插入数据的逻辑,包括将数据插入到目标表中。
在您提供的示例中,如果在`insertTrigger1`触发器中存在特定条件(付款人与明细行客户不同),则会打印一条消息。然而,如果条件不满足,则没有提供将数据插入到`ARSKDFTMX`表的逻辑。因此,如果您希望在满足特定条件时将数据插入到临时表中,您需要在触发器中编写相应的插入逻辑。
另一方面,对于`insertTrigger`触发器,它是一个`AFTER INSERT`触发器,说明它将在数据插入到`ARSKDFTMX`表之后执行。在这个触发器中,您进行了一系列更新操作来更新`SOPTItems`表中的数据。
请注意,即使在`INSTEAD OF INSERT`触发器中处理了插入逻辑,也会继续执行后续的`AFTER INSERT`触发器。因此,在您的情况下,无论是否满足条件,`insertTrigger`都会生效并执行相应的更新操作。
【以下回答由 GPT 生成】
问题答案是:当instead of insert
触发器生效后,同一个表的after insert
触发器不会继续生效。
根据给出的代码,当insert
触发器insertTrigger1
生效后,如果条件inserted.ARSKDFTMX_FKRBH <> inserted.ARSKDFTMX_XM08
满足,则会执行print '付款人与明细行客户不同,请修改明细'
语句。如果条件不满足,则不会执行任何操作。
因此,如果insertTrigger1
触发器生效且条件满足,不会继续执行after insert
触发器insertTrigger
中的代码。
关于是否需要重新写插入临时表数据到ARSKDFTMX
表的问题,根据提供的代码,如果insertTrigger1
触发器条件满足并执行了print '付款人与明细行客户不同,请修改明细'
语句,则不会执行插入操作,而是打印相应的提示信息。
所以,根据提供的代码,不会重新写插入临时表数据到ARSKDFTMX
表,也不会继续执行insert
语句。