SQL触发器问题。。

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语句。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^